1 #ifndef __smscoreapi_h__
2 #define __smscoreapi_h__
5 #define min(a,b) (((a) < (b)) ? (a) : (b))
8 #define SMS_ALLOC_ALIGNMENT 128
9 #define SMS_DMA_ALIGNMENT 16
10 #define SMS_ALIGN_ADDRESS(addr) ((((u32)(addr)) + (SMS_DMA_ALIGNMENT-1)) & ~(SMS_DMA_ALIGNMENT-1))
12 #define SMS_DEVICE_FAMILY2 1
13 #define SMS_ROM_NO_RESPONSE 2
14 #define SMS_DEVICE_NOT_READY 0x8000000
16 typedef struct _smscore_device smscore_device_t
;
17 typedef struct _smscore_client smscore_client_t
;
18 typedef struct _smscore_buffer smscore_buffer_t
;
20 typedef int (*hotplug_t
)(smscore_device_t
*coredev
, struct device
*device
, int arrival
);
22 typedef int (*setmode_t
)(void *context
, int mode
);
23 typedef void (*detectmode_t
)(void *context
, int *mode
);
24 typedef int (*sendrequest_t
)(void *context
, void *buffer
, size_t size
);
25 typedef int (*loadfirmware_t
)(void *context
, void *buffer
, size_t size
);
26 typedef int (*preload_t
)(void *context
);
27 typedef int (*postload_t
)(void *context
);
29 typedef int (*onresponse_t
)(void *context
, smscore_buffer_t
*cb
);
30 typedef void (*onremove_t
)(void *context
);
32 typedef struct _smscore_buffer
34 // public members, once passed to clients can be changed freely
35 struct list_head entry
;
39 // private members, read-only for clients
42 unsigned long offset_in_common
;
45 typedef struct _smsdevice_params
47 struct device
*device
;
55 setmode_t setmode_handler
;
56 detectmode_t detectmode_handler
;
57 sendrequest_t sendrequest_handler
;
58 preload_t preload_handler
;
59 postload_t postload_handler
;
64 typedef struct _smsclient_params
68 onresponse_t onresponse_handler
;
69 onremove_t onremove_handler
;
74 extern void smscore_registry_setmode(char *devpath
, int mode
);
75 extern int smscore_registry_getmode(char *devpath
);
77 extern int smscore_register_hotplug(hotplug_t hotplug
);
78 extern void smscore_unregister_hotplug(hotplug_t hotplug
);
80 extern int smscore_register_device(smsdevice_params_t
*params
, smscore_device_t
**coredev
);
81 extern void smscore_unregister_device(smscore_device_t
*coredev
);
83 extern int smscore_start_device(smscore_device_t
*coredev
);
84 extern int smscore_load_firmware(smscore_device_t
*coredev
, char* filename
, loadfirmware_t loadfirmware_handler
);
86 extern int smscore_set_device_mode(smscore_device_t
*coredev
, int mode
);
87 extern int smscore_get_device_mode(smscore_device_t
*coredev
);
89 extern int smscore_register_client(smscore_device_t
*coredev
, smsclient_params_t
* params
, smscore_client_t
**client
);
90 extern void smscore_unregister_client(smscore_client_t
*client
);
92 extern int smsclient_sendrequest(smscore_client_t
*client
, void *buffer
, size_t size
);
93 extern void smscore_onresponse(smscore_device_t
*coredev
, smscore_buffer_t
*cb
);
95 extern int smscore_get_common_buffer_size(smscore_device_t
*coredev
);
96 extern int smscore_map_common_buffer(smscore_device_t
*coredev
, struct vm_area_struct
* vma
);
98 extern smscore_buffer_t
*smscore_getbuffer(smscore_device_t
*coredev
);
99 extern void smscore_putbuffer(smscore_device_t
*coredev
, smscore_buffer_t
*cb
);
101 #endif // __smscoreapi_h__