======================================================================*/
-int pcmcia_access_configuration_register(client_handle_t handle,
+int pccard_access_configuration_register(struct pcmcia_socket *s,
+ unsigned int function,
conf_reg_t *reg)
{
- struct pcmcia_socket *s;
config_t *c;
int addr;
u_char val;
-
- if (CHECK_HANDLE(handle))
- return CS_BAD_HANDLE;
- s = SOCKET(handle);
- if (handle->Function == BIND_FN_ALL) {
- if (reg->Function >= s->functions)
- return CS_BAD_ARGS;
- c = &s->config[reg->Function];
- } else
- c = CONFIG(handle);
+
+ if (!s || !s->config)
+ return CS_NO_CARD;
+
+ c = &s->config[function];
if (c == NULL)
return CS_NO_CARD;
}
return CS_SUCCESS;
} /* access_configuration_register */
-
+EXPORT_SYMBOL(pccard_access_configuration_register);
/*====================================================================*/
======================================================================*/
/* in alpha order */
-EXPORT_SYMBOL(pcmcia_access_configuration_register);
EXPORT_SYMBOL(pcmcia_deregister_client);
EXPORT_SYMBOL(pcmcia_eject_card);
EXPORT_SYMBOL(pcmcia_get_card_services_info);
int pccard_get_configuration_info(struct pcmcia_socket *s, unsigned int function, config_info_t *config);
int pccard_reset_card(struct pcmcia_socket *skt);
int pccard_get_status(struct pcmcia_socket *s, unsigned int function, cs_status_t *status);
+int pccard_access_configuration_register(struct pcmcia_socket *s, unsigned int function, conf_reg_t *reg);
#define cs_socket_name(skt) ((skt)->dev.class_id)
case DS_ACCESS_CONFIGURATION_REGISTER:
if ((buf.conf_reg.Action == CS_WRITE) && !capable(CAP_SYS_ADMIN))
return -EPERM;
- ret = pcmcia_access_configuration_register(s->handle, &buf.conf_reg);
+ if (buf.conf_reg.Function &&
+ (buf.conf_reg.Function >= s->parent->functions))
+ ret = CS_BAD_ARGS;
+ else
+ ret = pccard_access_configuration_register(s->parent, buf.conf_reg.Function, &buf.conf_reg);
break;
case DS_GET_FIRST_REGION:
ret = pcmcia_get_first_region(s->handle, &buf.region);
}
EXPORT_SYMBOL(pcmcia_get_status);
+int pcmcia_access_configuration_register(client_handle_t handle,
+ conf_reg_t *reg)
+{
+ struct pcmcia_socket *s;
+ if (CHECK_HANDLE(handle))
+ return CS_BAD_HANDLE;
+ s = SOCKET(handle);
+ return pccard_access_configuration_register(s, handle->Function, reg);
+}
+EXPORT_SYMBOL(pcmcia_access_configuration_register);
+
#ifdef CONFIG_PCMCIA_OBSOLETE
int pcmcia_get_first_window(window_handle_t *win, win_req_t *req)