diff options
| -rw-r--r-- | drivers/pcmcia/cs_internal.h | 6 | ||||
| -rw-r--r-- | drivers/pcmcia/pcmcia_ioctl.c | 55 | ||||
| -rw-r--r-- | drivers/pcmcia/pcmcia_resource.c | 57 |
3 files changed, 55 insertions, 63 deletions
diff --git a/drivers/pcmcia/cs_internal.h b/drivers/pcmcia/cs_internal.h index 6df41de39d16..3bc02d53a3a3 100644 --- a/drivers/pcmcia/cs_internal.h +++ b/drivers/pcmcia/cs_internal.h | |||
| @@ -148,10 +148,6 @@ extern struct rw_semaphore pcmcia_socket_list_rwsem; | |||
| 148 | extern struct list_head pcmcia_socket_list; | 148 | extern struct list_head pcmcia_socket_list; |
| 149 | extern struct class pcmcia_socket_class; | 149 | extern struct class pcmcia_socket_class; |
| 150 | 150 | ||
| 151 | int pcmcia_get_window(struct pcmcia_socket *s, | ||
| 152 | window_handle_t *wh_out, | ||
| 153 | window_handle_t wh, | ||
| 154 | win_req_t *req); | ||
| 155 | int pccard_register_pcmcia(struct pcmcia_socket *s, struct pcmcia_callback *c); | 151 | int pccard_register_pcmcia(struct pcmcia_socket *s, struct pcmcia_callback *c); |
| 156 | struct pcmcia_socket *pcmcia_get_socket_by_nr(unsigned int nr); | 152 | struct pcmcia_socket *pcmcia_get_socket_by_nr(unsigned int nr); |
| 157 | 153 | ||
| @@ -227,8 +223,6 @@ extern void pcmcia_put_dev(struct pcmcia_device *p_dev); | |||
| 227 | 223 | ||
| 228 | struct pcmcia_device *pcmcia_device_add(struct pcmcia_socket *s, | 224 | struct pcmcia_device *pcmcia_device_add(struct pcmcia_socket *s, |
| 229 | unsigned int function); | 225 | unsigned int function); |
| 230 | int pcmcia_get_mem_page(struct pcmcia_socket *skt, window_handle_t win, | ||
| 231 | memreq_t *req); | ||
| 232 | 226 | ||
| 233 | /* pcmcia_ioctl.c */ | 227 | /* pcmcia_ioctl.c */ |
| 234 | extern void __init pcmcia_setup_ioctl(void); | 228 | extern void __init pcmcia_setup_ioctl(void); |
diff --git a/drivers/pcmcia/pcmcia_ioctl.c b/drivers/pcmcia/pcmcia_ioctl.c index 6245fde02b79..38b3a26a3ff3 100644 --- a/drivers/pcmcia/pcmcia_ioctl.c +++ b/drivers/pcmcia/pcmcia_ioctl.c | |||
| @@ -218,6 +218,61 @@ static int pcmcia_adjust_resource_info(adjust_t *adj) | |||
| 218 | return (ret); | 218 | return (ret); |
| 219 | } | 219 | } |
| 220 | 220 | ||
| 221 | |||
| 222 | /** pcmcia_get_window | ||
| 223 | */ | ||
| 224 | static int pcmcia_get_window(struct pcmcia_socket *s, window_handle_t *wh_out, | ||
| 225 | window_handle_t wh, win_req_t *req) | ||
| 226 | { | ||
| 227 | window_t *win; | ||
| 228 | window_handle_t w; | ||
| 229 | |||
| 230 | wh--; | ||
| 231 | if (!s || !(s->state & SOCKET_PRESENT)) | ||
| 232 | return -ENODEV; | ||
| 233 | if (wh >= MAX_WIN) | ||
| 234 | return -EINVAL; | ||
| 235 | for (w = wh; w < MAX_WIN; w++) | ||
| 236 | if (s->state & SOCKET_WIN_REQ(w)) | ||
| 237 | break; | ||
| 238 | if (w == MAX_WIN) | ||
| 239 | return -EINVAL; | ||
| 240 | win = &s->win[w]; | ||
| 241 | req->Base = win->ctl.res->start; | ||
| 242 | req->Size = win->ctl.res->end - win->ctl.res->start + 1; | ||
| 243 | req->AccessSpeed = win->ctl.speed; | ||
| 244 | req->Attributes = 0; | ||
| 245 | if (win->ctl.flags & MAP_ATTRIB) | ||
| 246 | req->Attributes |= WIN_MEMORY_TYPE_AM; | ||
| 247 | if (win->ctl.flags & MAP_ACTIVE) | ||
| 248 | req->Attributes |= WIN_ENABLE; | ||
| 249 | if (win->ctl.flags & MAP_16BIT) | ||
| 250 | req->Attributes |= WIN_DATA_WIDTH_16; | ||
| 251 | if (win->ctl.flags & MAP_USE_WAIT) | ||
| 252 | req->Attributes |= WIN_USE_WAIT; | ||
| 253 | |||
| 254 | *wh_out = w + 1; | ||
| 255 | return 0; | ||
| 256 | } /* pcmcia_get_window */ | ||
| 257 | |||
| 258 | |||
| 259 | /** pcmcia_get_mem_page | ||
| 260 | * | ||
| 261 | * Change the card address of an already open memory window. | ||
| 262 | */ | ||
| 263 | static int pcmcia_get_mem_page(struct pcmcia_socket *skt, window_handle_t wh, | ||
| 264 | memreq_t *req) | ||
| 265 | { | ||
| 266 | wh--; | ||
| 267 | if (wh >= MAX_WIN) | ||
| 268 | return -EINVAL; | ||
| 269 | |||
| 270 | req->Page = 0; | ||
| 271 | req->CardOffset = skt->win[wh].ctl.card_start; | ||
| 272 | return 0; | ||
| 273 | } /* pcmcia_get_mem_page */ | ||
| 274 | |||
| 275 | |||
| 221 | /** pccard_get_status | 276 | /** pccard_get_status |
| 222 | * | 277 | * |
| 223 | * Get the current socket state bits. We don't support the latched | 278 | * Get the current socket state bits. We don't support the latched |
diff --git a/drivers/pcmcia/pcmcia_resource.c b/drivers/pcmcia/pcmcia_resource.c index ae6abc7833d4..ae68b26a7050 100644 --- a/drivers/pcmcia/pcmcia_resource.c +++ b/drivers/pcmcia/pcmcia_resource.c | |||
| @@ -185,63 +185,6 @@ int pcmcia_access_configuration_register(struct pcmcia_device *p_dev, | |||
| 185 | EXPORT_SYMBOL(pcmcia_access_configuration_register); | 185 | EXPORT_SYMBOL(pcmcia_access_configuration_register); |
| 186 | 186 | ||
| 187 | 187 | ||
| 188 | /** pcmcia_get_window | ||
| 189 | */ | ||
| 190 | int pcmcia_get_window(struct pcmcia_socket *s, window_handle_t *wh_out, | ||
| 191 | window_handle_t wh, win_req_t *req) | ||
| 192 | { | ||
| 193 | window_t *win; | ||
| 194 | window_handle_t w; | ||
| 195 | |||
| 196 | if (!s || !(s->state & SOCKET_PRESENT)) | ||
| 197 | return -ENODEV; | ||
| 198 | |||
| 199 | wh--; | ||
| 200 | if (wh >= MAX_WIN) | ||
| 201 | return -EINVAL; | ||
| 202 | for (w = wh; w < MAX_WIN; w++) | ||
| 203 | if (s->state & SOCKET_WIN_REQ(w)) | ||
| 204 | break; | ||
| 205 | if (w == MAX_WIN) | ||
| 206 | return -EINVAL; | ||
| 207 | win = &s->win[w]; | ||
| 208 | req->Base = win->ctl.res->start; | ||
| 209 | req->Size = win->ctl.res->end - win->ctl.res->start + 1; | ||
| 210 | req->AccessSpeed = win->ctl.speed; | ||
| 211 | req->Attributes = 0; | ||
| 212 | if (win->ctl.flags & MAP_ATTRIB) | ||
| 213 | req->Attributes |= WIN_MEMORY_TYPE_AM; | ||
| 214 | if (win->ctl.flags & MAP_ACTIVE) | ||
| 215 | req->Attributes |= WIN_ENABLE; | ||
| 216 | if (win->ctl.flags & MAP_16BIT) | ||
| 217 | req->Attributes |= WIN_DATA_WIDTH_16; | ||
| 218 | if (win->ctl.flags & MAP_USE_WAIT) | ||
| 219 | req->Attributes |= WIN_USE_WAIT; | ||
| 220 | |||
| 221 | *wh_out = w++; | ||
| 222 | return 0; | ||
| 223 | } /* pcmcia_get_window */ | ||
| 224 | EXPORT_SYMBOL(pcmcia_get_window); | ||
| 225 | |||
| 226 | |||
| 227 | /** pcmcia_get_mem_page | ||
| 228 | * | ||
| 229 | * Change the card address of an already open memory window. | ||
| 230 | */ | ||
| 231 | int pcmcia_get_mem_page(struct pcmcia_socket *skt, window_handle_t wh, | ||
| 232 | memreq_t *req) | ||
| 233 | { | ||
| 234 | wh--; | ||
| 235 | if (wh >= MAX_WIN) | ||
| 236 | return -EINVAL; | ||
| 237 | |||
| 238 | req->Page = 0; | ||
| 239 | req->CardOffset = skt->win[wh].ctl.card_start; | ||
| 240 | return 0; | ||
| 241 | } /* pcmcia_get_mem_page */ | ||
| 242 | EXPORT_SYMBOL(pcmcia_get_mem_page); | ||
| 243 | |||
| 244 | |||
| 245 | int pcmcia_map_mem_page(struct pcmcia_device *p_dev, window_handle_t wh, | 188 | int pcmcia_map_mem_page(struct pcmcia_device *p_dev, window_handle_t wh, |
| 246 | memreq_t *req) | 189 | memreq_t *req) |
| 247 | { | 190 | { |
