blob: 43ebee68f77bc567264b7252db80d61e51a8aabb [file] [log] [blame]
Michael Krufky2e5c1ec82008-05-19 18:56:13 -03001#ifndef __smscoreapi_h__
2#define __smscoreapi_h__
3
Steven Toth955e9ca2008-05-22 15:46:32 -03004/* From sysksyms.h */
5
6#include <linux/version.h>
7#include <linux/device.h>
8#include <linux/list.h>
9#include <linux/mm.h>
10#include <asm/scatterlist.h>
11#include <asm/page.h>
12
13#include <linux/mutex.h>
14
15typedef struct mutex kmutex_t;
16
17#define kmutex_init(_p_) mutex_init(_p_)
18#define kmutex_lock(_p_) mutex_lock(_p_)
19#define kmutex_trylock(_p_) mutex_trylock(_p_)
20#define kmutex_unlock(_p_) mutex_unlock(_p_)
21
22
23/* End sysksyms.h */
24
Michael Krufky2e5c1ec82008-05-19 18:56:13 -030025#ifndef min
26#define min(a,b) (((a) < (b)) ? (a) : (b))
27#endif
28
29#define SMS_ALLOC_ALIGNMENT 128
30#define SMS_DMA_ALIGNMENT 16
31#define SMS_ALIGN_ADDRESS(addr) ((((u32)(addr)) + (SMS_DMA_ALIGNMENT-1)) & ~(SMS_DMA_ALIGNMENT-1))
32
33#define SMS_DEVICE_FAMILY2 1
34#define SMS_ROM_NO_RESPONSE 2
35#define SMS_DEVICE_NOT_READY 0x8000000
36
37typedef struct _smscore_device smscore_device_t;
38typedef struct _smscore_client smscore_client_t;
39typedef struct _smscore_buffer smscore_buffer_t;
40
41typedef int (*hotplug_t)(smscore_device_t *coredev, struct device *device, int arrival);
42
43typedef int (*setmode_t)(void *context, int mode);
44typedef void (*detectmode_t)(void *context, int *mode);
45typedef int (*sendrequest_t)(void *context, void *buffer, size_t size);
46typedef int (*loadfirmware_t)(void *context, void *buffer, size_t size);
47typedef int (*preload_t)(void *context);
48typedef int (*postload_t)(void *context);
49
50typedef int (*onresponse_t)(void *context, smscore_buffer_t *cb);
51typedef void (*onremove_t)(void *context);
52
53typedef struct _smscore_buffer
54{
55 // public members, once passed to clients can be changed freely
56 struct list_head entry;
57 int size;
58 int offset;
59
60 // private members, read-only for clients
61 void *p;
62 dma_addr_t phys;
63 unsigned long offset_in_common;
64} *psmscore_buffer_t;
65
66typedef struct _smsdevice_params
67{
68 struct device *device;
69
70 int buffer_size;
71 int num_buffers;
72
73 char devpath[32];
74 unsigned long flags;
75
76 setmode_t setmode_handler;
77 detectmode_t detectmode_handler;
78 sendrequest_t sendrequest_handler;
79 preload_t preload_handler;
80 postload_t postload_handler;
81
82 void *context;
83} smsdevice_params_t;
84
85typedef struct _smsclient_params
86{
87 int initial_id;
88 int data_type;
89 onresponse_t onresponse_handler;
90 onremove_t onremove_handler;
91
92 void *context;
93} smsclient_params_t;
94
95extern void smscore_registry_setmode(char *devpath, int mode);
96extern int smscore_registry_getmode(char *devpath);
97
98extern int smscore_register_hotplug(hotplug_t hotplug);
99extern void smscore_unregister_hotplug(hotplug_t hotplug);
100
101extern int smscore_register_device(smsdevice_params_t *params, smscore_device_t **coredev);
102extern void smscore_unregister_device(smscore_device_t *coredev);
103
104extern int smscore_start_device(smscore_device_t *coredev);
105extern int smscore_load_firmware(smscore_device_t *coredev, char* filename, loadfirmware_t loadfirmware_handler);
106
107extern int smscore_set_device_mode(smscore_device_t *coredev, int mode);
108extern int smscore_get_device_mode(smscore_device_t *coredev);
109
110extern int smscore_register_client(smscore_device_t *coredev, smsclient_params_t* params, smscore_client_t **client);
111extern void smscore_unregister_client(smscore_client_t *client);
112
113extern int smsclient_sendrequest(smscore_client_t *client, void *buffer, size_t size);
114extern void smscore_onresponse(smscore_device_t *coredev, smscore_buffer_t *cb);
115
116extern int smscore_get_common_buffer_size(smscore_device_t *coredev);
117extern int smscore_map_common_buffer(smscore_device_t *coredev, struct vm_area_struct * vma);
118
119extern smscore_buffer_t *smscore_getbuffer(smscore_device_t *coredev);
120extern void smscore_putbuffer(smscore_device_t *coredev, smscore_buffer_t *cb);
121
122#endif // __smscoreapi_h__