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)
126typedef 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
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)))
323typedef void (*drvmgr_drv_reg_func)(void);
344extern void _DRV_Manager_initialization(
void);
351extern void _DRV_Manager_init_level(
int level);
358extern int drvmgr_init(
void);
364extern void drvmgr_init_update(
void);
367extern int drvmgr_root_drv_register(
struct drvmgr_drv *drv);
370extern int drvmgr_drv_register(
struct drvmgr_drv *drv);
373extern int drvmgr_dev_register(
struct drvmgr_dev *dev);
385extern int drvmgr_dev_unregister(
struct drvmgr_dev *dev);
388extern int drvmgr_bus_register(
struct drvmgr_bus *bus);
391extern int drvmgr_bus_unregister(
struct drvmgr_bus *bus);
398extern int drvmgr_children_unregister(
struct drvmgr_bus *bus);
401extern int drvmgr_dev_drv_separate(
struct drvmgr_dev *dev);
409extern int drvmgr_alloc_dev(
struct drvmgr_dev **pdev,
int extra);
417extern int drvmgr_alloc_bus(
struct drvmgr_bus **pbus,
int extra);
427extern 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
515extern intptr_t drvmgr_for_each_dev(
528extern int drvmgr_get_dev(
539extern int drvmgr_freq_get(
542 unsigned int *freq_hz);
553extern int drvmgr_get_dev_prefix(
struct drvmgr_dev *
dev,
char *dev_prefix);
568extern int drvmgr_interrupt_register(
585extern int drvmgr_interrupt_unregister(
600extern int drvmgr_interrupt_clear(
614extern int drvmgr_interrupt_unmask(
626extern int drvmgr_interrupt_mask(
639extern int drvmgr_interrupt_set_affinity(
642 const Processor_mask *cpus);
665 CPUMEM_FROM_DMA = 0x1,
681 DMAMEM_FROM_CPU = 0x3,
683#define DRVMGR_TR_REVERSE 0x1
684#define DRVMGR_TR_PATH 0x2
722extern unsigned int drvmgr_translate(
724 unsigned int options,
747extern unsigned int drvmgr_translate_bus(
762extern int drvmgr_translate_check(
764 unsigned int options,
773extern int drvmgr_func_get(
void *obj,
int funcid,
void **func);
776extern 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)
833typedef uint8_t (*drvmgr_r8)(uint8_t *srcadr);
834typedef uint16_t (*drvmgr_r16)(uint16_t *srcadr);
835typedef uint32_t (*drvmgr_r32)(uint32_t *srcadr);
836typedef uint64_t (*drvmgr_r64)(uint64_t *srcadr);
837typedef void (*drvmgr_w8)(uint8_t *dstadr, uint8_t data);
838typedef void (*drvmgr_w16)(uint16_t *dstadr, uint16_t data);
839typedef void (*drvmgr_w32)(uint32_t *dstadr, uint32_t data);
840typedef void (*drvmgr_w64)(uint64_t *dstadr, uint64_t data);
844typedef int (*drvmgr_rmem)(
void *dest,
const void *src,
int n);
848typedef int (*drvmgr_wmem)(
void *dest,
const void *src,
int n);
852typedef int (*drvmgr_memset)(
void *dstadr,
int c,
size_t n);
855typedef uint8_t (*drvmgr_r8_arg)(uint8_t *srcadr,
void *a);
856typedef uint16_t (*drvmgr_r16_arg)(uint16_t *srcadr,
void *a);
857typedef uint32_t (*drvmgr_r32_arg)(uint32_t *srcadr,
void *a);
858typedef uint64_t (*drvmgr_r64_arg)(uint64_t *srcadr,
void *a);
859typedef void (*drvmgr_w8_arg)(uint8_t *dstadr, uint8_t data,
void *a);
860typedef void (*drvmgr_w16_arg)(uint16_t *dstadr, uint16_t data,
void *a);
861typedef void (*drvmgr_w32_arg)(uint32_t *dstadr, uint32_t data,
void *a);
862typedef void (*drvmgr_w64_arg)(uint64_t *dstadr, uint64_t data,
void *a);
863typedef int (*drvmgr_rmem_arg)(
void *dest,
const void *src,
int n,
void *a);
864typedef int (*drvmgr_wmem_arg)(
void *dest,
const void *src,
int n,
void *a);
865typedef int (*drvmgr_memset_arg)(
void *dstadr,
int c,
size_t n,
void *a);
869 int funcid,
void *adr);
872extern void drvmgr_rw_memset(
906extern int drvmgr_for_each_listdev(
908 unsigned int state_set_mask,
909 unsigned int state_clr_mask,
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 |\
924extern void drvmgr_summary(
void);
927extern void drvmgr_print_devs(
unsigned int options);
930extern void drvmgr_print_topo(
void);
935extern 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
946extern void drvmgr_info(
void *
id,
unsigned int options);
949extern void drvmgr_info_dev(
struct drvmgr_dev *
dev,
unsigned int options);
952extern void drvmgr_info_bus(
struct drvmgr_bus *bus,
unsigned int options);
955extern void drvmgr_info_drv(
struct drvmgr_drv *drv,
unsigned int options);
958extern void drvmgr_info_devs_on_bus(
struct drvmgr_bus *bus,
unsigned int options);
961extern void drvmgr_info_devs(
unsigned int options);
964extern void drvmgr_info_drvs(
unsigned int options);
967extern void drvmgr_info_buses(
unsigned int options);
970extern struct drvmgr_drv *drvmgr_drv_by_id(uint64_t
id);
973extern struct drvmgr_drv *drvmgr_drv_by_name(
const char *name);
976extern struct drvmgr_dev *drvmgr_dev_by_name(
const char *name);
#define NULL
Requests a GPIO pin group configuration.
Definition: bestcomm_api.h:77
#define RTEMS_INLINE_ROUTINE
Definition: basedefs.h:66
SuperCore SMP Implementation.
void(* get_info_dev)(struct drvmgr_dev *, void(*print)(void *p, char *str), void *p)
Definition: drvmgr.h:153
int(* unite)(struct drvmgr_drv *, struct drvmgr_dev *)
Definition: drvmgr.h:133
char * dev_prefix
Definition: drvmgr.h:122
struct drvmgr_drv_res resource[]
Definition: drvmgr.h:216
struct drvmgr_bus_res * next
Definition: drvmgr.h:215
struct drvmgr_func * funcs
Definition: drvmgr.h:246
int error
Definition: drvmgr.h:255
int state
Definition: drvmgr.h:254
int obj_type
Definition: drvmgr.h:238
void * priv
Definition: drvmgr.h:243
struct drvmgr_map_entry * maps_down
Definition: drvmgr.h:250
struct drvmgr_dev * dev
Definition: drvmgr.h:242
struct drvmgr_bus_res * reslist
Definition: drvmgr.h:248
unsigned char depth
Definition: drvmgr.h:240
struct drvmgr_bus * next
Definition: drvmgr.h:241
int dev_cnt
Definition: drvmgr.h:247
struct drvmgr_bus_ops * ops
Definition: drvmgr.h:245
struct drvmgr_map_entry * maps_up
Definition: drvmgr.h:249
int level
Definition: drvmgr.h:253
unsigned char bus_type
Definition: drvmgr.h:239
struct drvmgr_dev * children
Definition: drvmgr.h:244
struct drvmgr_bus * bus
Definition: drvmgr.h:286
int level
Definition: drvmgr.h:290
struct drvmgr_dev * next
Definition: drvmgr.h:275
char * name
Definition: drvmgr.h:283
unsigned int state
Definition: drvmgr.h:289
struct drvmgr_dev * next_in_bus
Definition: drvmgr.h:276
struct drvmgr_drv * drv
Definition: drvmgr.h:279
void * priv
Definition: drvmgr.h:284
struct drvmgr_dev * next_in_drv
Definition: drvmgr.h:277
struct drvmgr_bus * parent
Definition: drvmgr.h:280
int obj_type
Definition: drvmgr.h:274
int error
Definition: drvmgr.h:291
short minor_drv
Definition: drvmgr.h:281
void * businfo
Definition: drvmgr.h:285
short minor_bus
Definition: drvmgr.h:282
int(* info)(struct drvmgr_dev *, void(*print)(void *p, char *str), void *p, int, char *argv[])
Definition: drvmgr.h:298
int(* remove)(struct drvmgr_dev *)
Definition: drvmgr.h:297
int minor_bus
Definition: drvmgr.h:209
struct drvmgr_key * keys
Definition: drvmgr.h:210
uint64_t drv_id
Definition: drvmgr.h:208
char * name
Definition: drvmgr.h:309
struct drvmgr_drv * next
Definition: drvmgr.h:305
unsigned int dev_cnt
Definition: drvmgr.h:313
struct drvmgr_drv_ops * ops
Definition: drvmgr.h:311
struct drvmgr_func * funcs
Definition: drvmgr.h:312
unsigned int dev_priv_size
Definition: drvmgr.h:314
struct drvmgr_dev * dev
Definition: drvmgr.h:306
int obj_type
Definition: drvmgr.h:304
uint64_t drv_id
Definition: drvmgr.h:308
int bus_type
Definition: drvmgr.h:310
Definition: drvmgr_list.h:24
unsigned int size
Definition: drvmgr.h:227
char * name
Definition: drvmgr.h:226
char * to_adr
Definition: drvmgr.h:230
char * from_adr
Definition: drvmgr.h:228
unsigned size
Definition: tte.h:1
unsigned p
Definition: tte.h:17
unsigned int i
Definition: drvmgr.h:192
char * str
Definition: drvmgr.h:193
void * ptr
Definition: drvmgr.h:194