10 #ifndef _DRIVER_MANAGER_H_ 11 #define _DRIVER_MANAGER_H_ 14 #include <drvmgr/drvmgr_list.h> 26 #define DRVMGR_LEVEL_MAX 4 31 #ifndef DRVMGR_USE_LOCKS 32 #define DRVMGR_USE_LOCKS 1 40 #define BUS_LIST_HEAD(list) LIST_HEAD(list, struct drvmgr_bus) 41 #define BUS_LIST_TAIL(list) LIST_TAIL(list, struct drvmgr_bus) 42 #define DEV_LIST_HEAD(list) LIST_HEAD(list, struct drvmgr_dev) 43 #define DEV_LIST_TAIL(list) LIST_TAIL(list, struct drvmgr_dev) 44 #define DRV_LIST_HEAD(list) LIST_HEAD(list, struct drvmgr_drv) 45 #define DRV_LIST_TAIL(list) LIST_TAIL(list, struct drvmgr_drv) 48 #define DRVMGR_BUS_TYPE_NONE 0 49 #define DRVMGR_BUS_TYPE_ROOT 1 50 #define DRVMGR_BUS_TYPE_PCI 2 51 #define DRVMGR_BUS_TYPE_AMBAPP 3 52 #define DRVMGR_BUS_TYPE_LEON2_AMBA 4 53 #define DRVMGR_BUS_TYPE_AMBAPP_DIST 5 54 #define DRVMGR_BUS_TYPE_SPW_RMAP 6 55 #define DRVMGR_BUS_TYPE_AMBAPP_RMAP 7 80 #define DRIVER_ID_BUS_MASK 0x00000000000000FFULL 83 #define DRIVER_ID_RSV_MASK 0xFF00000000000000ULL 86 #define DRIVER_ID_DEV_MASK 0x00FFFFFFFFFFFF00ULL 89 #define DRIVER_ID(busid, devid) ((unsigned long long) \ 90 ((((unsigned long long)(devid) << 8) & DRIVER_ID_DEV_MASK) | \ 91 ((unsigned long long)(busid) & DRIVER_ID_BUS_MASK))) 94 #define DRIVER_BUSID_GET(id) ((unsigned long long)(id) & DRIVER_ID_BUS_MASK) 95 #define DRIVER_DEVID_GET(id) (((unsigned long long)(id) & DRIVER_ID_DEV_MASK) >> 8) 97 #define DRIVER_ROOTBUS_ID(bus_type) DRIVER_ID(bus_type, 0) 102 #define DRIVER_ROOT_ID DRIVER_ROOTBUS_ID(DRVMGR_BUS_TYPE_ROOT) 105 #define DRIVER_PCIBUS_ID DRIVER_ROOTBUS_ID(DRVMGR_BUS_TYPE_PCI) 108 #define DRIVER_GRLIB_AMBAPP_ID DRIVER_ROOTBUS_ID(DRVMGR_BUS_TYPE_AMBAPP) 111 #define DRIVER_LEON2_AMBA_ID DRIVER_ROOTBUS_ID(DRVMGR_BUS_TYPE_LEON2_AMBA) 114 #define DRIVER_AMBAPP_DIST_ID DRIVER_ROOTBUS_ID(DRVMGR_BUS_TYPE_AMBAPP_DIST) 126 typedef void (*drvmgr_isr)(
void *arg);
131 int (*init[DRVMGR_LEVEL_MAX])(
struct drvmgr_bus *);
136 int (*int_register)(
struct drvmgr_dev *,
int index,
const char *info, drvmgr_isr isr,
void *arg);
137 int (*int_unregister)(
struct drvmgr_dev *,
int index, drvmgr_isr isr,
void *arg);
138 int (*int_clear)(
struct drvmgr_dev *,
int index);
139 int (*int_mask)(
struct drvmgr_dev *,
int index);
140 int (*int_unmask)(
struct drvmgr_dev *,
int index);
142 int (*int_set_affinity)(
struct drvmgr_dev *,
int index,
143 const Processor_mask *cpus);
149 int (*get_freq)(
struct drvmgr_dev*, int,
unsigned int*);
154 void (*print)(
void *
p,
char *str),
void *p);
156 #define BUS_OPS_NUM (sizeof(struct drvmgr_bus_ops)/sizeof(void (*)(void))) 162 #define DRVMGR_FUNC(_ID_, _FUNC_) {(int)(_ID_), (void *)(_FUNC_)} 163 #define DRVMGR_FUNC_END {0, NULL} 182 DRVMGR_KT_STRING = 2,
183 DRVMGR_KT_POINTER = 3,
186 #define DRVMGR_KEY_EMPTY {NULL, DRVMGR_KT_NONE, {0}} 187 #define DRVMGR_RES_EMPTY {0, 0, NULL} 188 #define MMAP_EMPTY {0, 0, 0} 200 enum drvmgr_kt key_type;
233 #define DRVMGR_TRANSLATE_ONE2ONE NULL 234 #define DRVMGR_TRANSLATE_NO_BRIDGE ((void *)1) 259 #define BUS_STATE_INIT_FAILED 0x00000001 260 #define BUS_STATE_LIST_INACTIVE 0x00001000 261 #define BUS_STATE_DEPEND_FAILED 0x00000004 264 #define DEV_STATE_INIT_FAILED 0x00000001 265 #define DEV_STATE_INIT_DONE 0x00000002 266 #define DEV_STATE_DEPEND_FAILED 0x00000004 267 #define DEV_STATE_UNITED 0x00000100 268 #define DEV_STATE_REMOVED 0x00000200 269 #define DEV_STATE_IGNORED 0x00000400 272 #define DEV_STATE_LIST_INACTIVE 0x00001000 298 int (*init[DRVMGR_LEVEL_MAX])(
struct drvmgr_dev *);
300 int (*info)(
struct drvmgr_dev *, void (*print)(
void *
p,
char *str),
void *p,
int,
char *argv[]);
302 #define DRVMGR_OPS_NUM(x) (sizeof(x)/sizeof(void (*)(void))) 323 typedef void (*drvmgr_drv_reg_func)(void);
344 extern void _DRV_Manager_initialization(
void);
351 extern void _DRV_Manager_init_level(
int level);
358 extern int drvmgr_init(
void);
364 extern void drvmgr_init_update(
void);
367 extern int drvmgr_root_drv_register(
struct drvmgr_drv *drv);
370 extern int drvmgr_drv_register(
struct drvmgr_drv *drv);
373 extern int drvmgr_dev_register(
struct drvmgr_dev *dev);
385 extern int drvmgr_dev_unregister(
struct drvmgr_dev *dev);
388 extern int drvmgr_bus_register(
struct drvmgr_bus *bus);
391 extern int drvmgr_bus_unregister(
struct drvmgr_bus *bus);
398 extern int drvmgr_children_unregister(
struct drvmgr_bus *bus);
401 extern int drvmgr_dev_drv_separate(
struct drvmgr_dev *dev);
409 extern int drvmgr_alloc_dev(
struct drvmgr_dev **pdev,
int extra);
417 extern int drvmgr_alloc_bus(
struct drvmgr_bus **pbus,
int extra);
427 extern void drvmgr_bus_res_add(
struct drvmgr_bus *bus,
461 enum drvmgr_kt key_type);
478 enum drvmgr_kt key_type);
513 #define DRVMGR_FED_BF 1 514 #define DRVMGR_FED_DF 0 515 extern intptr_t drvmgr_for_each_dev(
516 intptr_t (*func)(
struct drvmgr_dev *dev,
void *arg),
528 extern int drvmgr_get_dev(
539 extern int drvmgr_freq_get(
542 unsigned int *freq_hz);
545 extern int drvmgr_on_rootbus(
struct drvmgr_dev *dev);
568 extern int drvmgr_interrupt_register(
585 extern int drvmgr_interrupt_unregister(
600 extern int drvmgr_interrupt_clear(
614 extern int drvmgr_interrupt_unmask(
626 extern int drvmgr_interrupt_mask(
639 extern int drvmgr_interrupt_set_affinity(
642 const Processor_mask *cpus);
646 enum drvmgr_tr_opts {
665 CPUMEM_FROM_DMA = 0x1,
681 DMAMEM_FROM_CPU = 0x3,
683 #define DRVMGR_TR_REVERSE 0x1 684 #define DRVMGR_TR_PATH 0x2 722 extern unsigned int drvmgr_translate(
724 unsigned int options,
747 extern unsigned int drvmgr_translate_bus(
762 extern int drvmgr_translate_check(
764 unsigned int options,
773 extern int drvmgr_func_get(
void *obj,
int funcid,
void **func);
776 extern int drvmgr_func_call(
void *obj,
int funcid,
void *a,
void *b,
void *c,
void *d);
782 #define DRVMGR_FUNCID(major, minor) ((((major) & 0xfff) << 20) | ((minor) & 0xfffff)) 783 #define DRVMGR_FUNCID_NONE 0 784 #define DRVMGR_FUNCID_END DRVMGR_FUNCID(DRVMGR_FUNCID_NONE, 0) 793 #define RW_SIZE_1 0x00001 794 #define RW_SIZE_2 0x00002 795 #define RW_SIZE_4 0x00004 796 #define RW_SIZE_8 0x00008 797 #define RW_SIZE_ANY 0x00000 798 #define RW_SIZE(id) ((unsigned int)(id) & 0xf) 800 #define RW_DIR_ANY 0x00000 801 #define RW_READ 0x00000 802 #define RW_WRITE 0x00010 803 #define RW_SET 0x00020 804 #define RW_DIR(id) (((unsigned int)(id) >> 4) & 0x3) 806 #define RW_RAW 0x00000 807 #define RW_LITTLE 0x00040 808 #define RW_BIG 0x00080 809 #define RW_ENDIAN(id) (((unsigned int)(id) >> 6) & 0x3) 811 #define RW_TYPE_ANY 0x00000 812 #define RW_REG 0x00100 813 #define RW_MEM 0x00200 814 #define RW_MEMREG 0x00300 815 #define RW_CFG 0x00400 816 #define RW_TYPE(id) (((unsigned int)(id) >> 8) & 0xf) 818 #define RW_ARG 0x01000 819 #define RW_ERR 0x02000 822 #define DRVMGR_RWFUNC(minor) DRVMGR_FUNCID(FUNCID_RW, minor) 833 typedef uint8_t (*drvmgr_r8)(uint8_t *srcadr);
834 typedef uint16_t (*drvmgr_r16)(uint16_t *srcadr);
835 typedef uint32_t (*drvmgr_r32)(uint32_t *srcadr);
836 typedef uint64_t (*drvmgr_r64)(uint64_t *srcadr);
837 typedef void (*drvmgr_w8)(uint8_t *dstadr, uint8_t data);
838 typedef void (*drvmgr_w16)(uint16_t *dstadr, uint16_t data);
839 typedef void (*drvmgr_w32)(uint32_t *dstadr, uint32_t data);
840 typedef void (*drvmgr_w64)(uint64_t *dstadr, uint64_t data);
844 typedef int (*drvmgr_rmem)(
void *dest,
const void *src,
int n);
848 typedef int (*drvmgr_wmem)(
void *dest,
const void *src,
int n);
852 typedef int (*drvmgr_memset)(
void *dstadr,
int c,
size_t n);
855 typedef uint8_t (*drvmgr_r8_arg)(uint8_t *srcadr,
void *a);
856 typedef uint16_t (*drvmgr_r16_arg)(uint16_t *srcadr,
void *a);
857 typedef uint32_t (*drvmgr_r32_arg)(uint32_t *srcadr,
void *a);
858 typedef uint64_t (*drvmgr_r64_arg)(uint64_t *srcadr,
void *a);
859 typedef void (*drvmgr_w8_arg)(uint8_t *dstadr, uint8_t data,
void *a);
860 typedef void (*drvmgr_w16_arg)(uint16_t *dstadr, uint16_t data,
void *a);
861 typedef void (*drvmgr_w32_arg)(uint32_t *dstadr, uint32_t data,
void *a);
862 typedef void (*drvmgr_w64_arg)(uint64_t *dstadr, uint64_t data,
void *a);
863 typedef int (*drvmgr_rmem_arg)(
void *dest,
const void *src,
int n,
void *a);
864 typedef int (*drvmgr_wmem_arg)(
void *dest,
const void *src,
int n,
void *a);
865 typedef int (*drvmgr_memset_arg)(
void *dstadr,
int c,
size_t n,
void *a);
869 int funcid,
void *adr);
872 extern void drvmgr_rw_memset(
906 extern int drvmgr_for_each_listdev(
908 unsigned int state_set_mask,
909 unsigned int state_clr_mask,
910 int (*func)(
struct drvmgr_dev *dev,
void *arg),
914 #define PRINT_DEVS_FAILED 0x01 915 #define PRINT_DEVS_ASSIGNED 0x02 916 #define PRINT_DEVS_UNASSIGNED 0x04 917 #define PRINT_DEVS_IGNORED 0x08 918 #define PRINT_DEVS_ALL (PRINT_DEVS_FAILED | \ 919 PRINT_DEVS_ASSIGNED | \ 920 PRINT_DEVS_UNASSIGNED |\ 924 extern void drvmgr_summary(
void);
927 extern void drvmgr_print_devs(
unsigned int options);
930 extern void drvmgr_print_topo(
void);
935 extern void drvmgr_print_mem(
void);
937 #define OPTION_DEV_GENINFO 0x00000001 938 #define OPTION_DEV_BUSINFO 0x00000002 939 #define OPTION_DEV_DRVINFO 0x00000004 940 #define OPTION_DRV_DEVS 0x00000100 941 #define OPTION_BUS_DEVS 0x00010000 942 #define OPTION_RECURSIVE 0x01000000 943 #define OPTION_INFO_ALL 0xffffffff 946 extern void drvmgr_info(
void *
id,
unsigned int options);
949 extern void drvmgr_info_dev(
struct drvmgr_dev *dev,
unsigned int options);
952 extern void drvmgr_info_bus(
struct drvmgr_bus *bus,
unsigned int options);
955 extern void drvmgr_info_drv(
struct drvmgr_drv *drv,
unsigned int options);
958 extern void drvmgr_info_devs_on_bus(
struct drvmgr_bus *bus,
unsigned int options);
961 extern void drvmgr_info_devs(
unsigned int options);
964 extern void drvmgr_info_drvs(
unsigned int options);
967 extern void drvmgr_info_buses(
unsigned int options);
970 extern struct drvmgr_drv *drvmgr_drv_by_id(uint64_t
id);
973 extern struct drvmgr_drv *drvmgr_drv_by_name(
const char *name);
976 extern struct drvmgr_dev *drvmgr_dev_by_name(
const char *name);
struct drvmgr_drv_ops * ops
Definition: drvmgr.h:313
unsigned int size
Definition: drvmgr.h:227
struct drvmgr_bus * parent
Definition: drvmgr.h:282
uint64_t drv_id
Definition: drvmgr.h:310
struct drvmgr_bus_res * reslist
Definition: drvmgr.h:248
struct drvmgr_drv * next
Definition: drvmgr.h:307
struct drvmgr_dev * children
Definition: drvmgr.h:244
int minor_bus
Definition: drvmgr.h:209
#define RTEMS_INLINE_ROUTINE
Definition: basedefs.h:65
int state
Definition: drvmgr.h:254
unsigned char bus_type
Definition: drvmgr.h:239
struct drvmgr_bus_ops * ops
Definition: drvmgr.h:245
struct drvmgr_bus * bus
Definition: drvmgr.h:288
struct drvmgr_map_entry * maps_up
Definition: drvmgr.h:249
void * priv
Definition: drvmgr.h:243
unsigned p
Definition: tte.h:90
char * str
Definition: drvmgr.h:193
int bus_type
Definition: drvmgr.h:312
struct drvmgr_func * funcs
Definition: drvmgr.h:314
char * from_adr
Definition: drvmgr.h:228
struct drvmgr_dev * next_in_bus
Definition: drvmgr.h:278
unsigned int state
Definition: drvmgr.h:291
struct drvmgr_dev * dev
Definition: drvmgr.h:242
void * ptr
Definition: drvmgr.h:194
struct drvmgr_dev * next
Definition: drvmgr.h:277
int obj_type
Definition: drvmgr.h:276
struct drvmgr_map_entry * maps_down
Definition: drvmgr.h:250
struct drvmgr_func * funcs
Definition: drvmgr.h:246
int dev_cnt
Definition: drvmgr.h:247
char * name
Definition: drvmgr.h:226
char * name
Definition: drvmgr.h:311
struct drvmgr_key * keys
Definition: drvmgr.h:210
struct drvmgr_dev * next_in_drv
Definition: drvmgr.h:279
char * dev_prefix
Definition: drvmgr.h:122
int error
Definition: drvmgr.h:293
unsigned int dev_cnt
Definition: drvmgr.h:315
void * businfo
Definition: drvmgr.h:287
int obj_type
Definition: drvmgr.h:306
struct drvmgr_dev * dev
Definition: drvmgr.h:308
int level
Definition: drvmgr.h:292
unsigned int i
Definition: drvmgr.h:192
short minor_bus
Definition: drvmgr.h:284
void * priv
Definition: drvmgr.h:286
int level
Definition: drvmgr.h:253
short minor_drv
Definition: drvmgr.h:283
unsigned size
Definition: tte.h:74
unsigned char depth
Definition: drvmgr.h:240
unsigned int dev_priv_size
Definition: drvmgr.h:316
struct drvmgr_drv * drv
Definition: drvmgr.h:281
char * name
Definition: drvmgr.h:285
struct drvmgr_bus * next
Definition: drvmgr.h:241
struct drvmgr_bus_res * next
Definition: drvmgr.h:215
Definition: drvmgr_list.h:24
SuperCore SMP Implementation.
int obj_type
Definition: drvmgr.h:238
char * to_adr
Definition: drvmgr.h:230
#define NULL
Requests a GPIO pin group configuration.
Definition: bestcomm_api.h:77
uint64_t drv_id
Definition: drvmgr.h:208
int error
Definition: drvmgr.h:255