Date:2011-04-10 12:25:11 (12 years 11 months ago)
Author:Werner Almesberger
Commit:1a27e590d971ba252169ab97af2cf7bb18a3a748
Message:tools/: cleaned up the gross layering violation in atrf-xtal/atben.c

- include/atrf.h (atrf_ben_regs), lib/atrf.c (atrf_ben_regs),
lib/driver.h (atben_regs), lib/atben.c (atben_regs): new function to
get the mmap'ed registers in a less disgusting way
- atrf-xtal/atben.c (base, ben_setup): cleaned up the horrible layering
violation
Files: tools/atrf-xtal/atben.c (2 diffs)
tools/include/atrf.h (1 diff)
tools/lib/atben.c (1 diff)
tools/lib/atrf.c (1 diff)
tools/lib/driver.h (1 diff)

Change Details

tools/atrf-xtal/atben.c
7878/* ----- Ben hardware ------------------------------------------------------ */
7979
8080
81static volatile void *base;
82
8381static volatile uint32_t *icmr, *icmsr, *icmcr;
8482static uint32_t old_icmr;
8583
...... 
129127
130128static void ben_setup(struct atrf_dsc *dsc)
131129{
132    /*
133     * @@@ Ugly. Should either mmap the registers again here or add some
134     * proper means to extract the pointer directly.
135     */
136
137    struct atrf_dsc {
138        void *driver;
139        void *handle;
140        int chip_id;
141    };
142    struct atben_dsc {
143        int fd;
144        void *mem;
145    };
146
147    base = ((struct atben_dsc *) ((struct atrf_dsc *) dsc)->handle)->mem;
130    volatile void *base = atrf_ben_regs(dsc);
148131
149132    icmr = base+0x1004;
150133    icmsr = base+0x1008;
tools/include/atrf.h
2727
2828
2929void *atrf_usb_handle(struct atrf_dsc *dsc); /* hack for atrf-id */
30void *atrf_ben_regs(struct atrf_dsc *dsc); /* hack for atrf-xtal */
3031
3132const char *atrf_default_driver_name(void);
3233struct atrf_dsc *atrf_open(const char *arg);
tools/lib/atben.c
351351}
352352
353353
354/* ----- Driver-specific hacks --------------------------------------------- */
355
356
357void *atben_regs(void *handle)
358{
359        struct atben_dsc *dsc = handle;
360
361    return dsc->mem;
362}
363
364
354365/* ----- Driver interface -------------------------------------------------- */
355366
356367
tools/lib/atrf.c
4242}
4343
4444
45void *atrf_ben_regs(struct atrf_dsc *dsc)
46{
47#ifdef HAVE_BEN
48    return atben_regs(dsc->handle);
49#else
50    return NULL;
51#endif
52}
53
54
4555int atrf_error(struct atrf_dsc *dsc)
4656{
4757    return dsc->driver->error ? dsc->driver->error(dsc->handle) : 0;
tools/lib/driver.h
4040    void (*reg_write)(void *dsc, uint8_t reg, uint8_t value),
4141    void *handle, int mhz);
4242
43void *atben_regs(void *dsc); /* hack for atrf-xtal */
44
4345#endif /* !DRIVER_H */

Archive Download the corresponding diff file



interactive