pcmcia: remove obsolete ioctl
Signed-off-by: Dominik Brodowski <linux@dominikbrodowski.net>
This commit is contained in:
parent
b37fa16e78
commit
5716d415f8
10 changed files with 7 additions and 1383 deletions
|
@ -116,29 +116,6 @@ Who: Mauro Carvalho Chehab <mchehab@infradead.org>
|
|||
|
||||
---------------------------
|
||||
|
||||
What: PCMCIA control ioctl (needed for pcmcia-cs [cardmgr, cardctl])
|
||||
When: 2.6.35/2.6.36
|
||||
Files: drivers/pcmcia/: pcmcia_ioctl.c
|
||||
Why: With the 16-bit PCMCIA subsystem now behaving (almost) like a
|
||||
normal hotpluggable bus, and with it using the default kernel
|
||||
infrastructure (hotplug, driver core, sysfs) keeping the PCMCIA
|
||||
control ioctl needed by cardmgr and cardctl from pcmcia-cs is
|
||||
unnecessary and potentially harmful (it does not provide for
|
||||
proper locking), and makes further cleanups and integration of the
|
||||
PCMCIA subsystem into the Linux kernel device driver model more
|
||||
difficult. The features provided by cardmgr and cardctl are either
|
||||
handled by the kernel itself now or are available in the new
|
||||
pcmciautils package available at
|
||||
http://kernel.org/pub/linux/utils/kernel/pcmcia/
|
||||
|
||||
For all architectures except ARM, the associated config symbol
|
||||
has been removed from kernel 2.6.34; for ARM, it will be likely
|
||||
be removed from kernel 2.6.35. The actual code will then likely
|
||||
be removed from kernel 2.6.36.
|
||||
Who: Dominik Brodowski <linux@dominikbrodowski.net>
|
||||
|
||||
---------------------------
|
||||
|
||||
What: sys_sysctl
|
||||
When: September 2010
|
||||
Option: CONFIG_SYSCTL_SYSCALL
|
||||
|
|
|
@ -7,7 +7,6 @@ pcmcia_core-$(CONFIG_CARDBUS) += cardbus.o
|
|||
obj-$(CONFIG_PCCARD) += pcmcia_core.o
|
||||
|
||||
pcmcia-y += ds.o pcmcia_resource.o cistpl.o pcmcia_cis.o
|
||||
pcmcia-$(CONFIG_PCMCIA_IOCTL) += pcmcia_ioctl.o
|
||||
obj-$(CONFIG_PCMCIA) += pcmcia.o
|
||||
|
||||
pcmcia_rsrc-y += rsrc_mgr.o
|
||||
|
|
|
@ -60,14 +60,6 @@ struct pccard_resource_ops {
|
|||
struct resource* (*find_mem) (unsigned long base, unsigned long num,
|
||||
unsigned long align, int low,
|
||||
struct pcmcia_socket *s);
|
||||
int (*add_io) (struct pcmcia_socket *s,
|
||||
unsigned int action,
|
||||
unsigned long r_start,
|
||||
unsigned long r_end);
|
||||
int (*add_mem) (struct pcmcia_socket *s,
|
||||
unsigned int action,
|
||||
unsigned long r_start,
|
||||
unsigned long r_end);
|
||||
int (*init) (struct pcmcia_socket *s);
|
||||
void (*exit) (struct pcmcia_socket *s);
|
||||
};
|
||||
|
@ -146,6 +138,8 @@ void pcmcia_put_socket(struct pcmcia_socket *skt);
|
|||
/* ds.c */
|
||||
extern struct bus_type pcmcia_bus_type;
|
||||
|
||||
struct pcmcia_device;
|
||||
|
||||
/* pcmcia_resource.c */
|
||||
extern int pcmcia_release_configuration(struct pcmcia_device *p_dev);
|
||||
extern int pcmcia_validate_mem(struct pcmcia_socket *s);
|
||||
|
@ -188,34 +182,4 @@ int pccard_get_next_tuple(struct pcmcia_socket *s, unsigned int function,
|
|||
|
||||
int pccard_get_tuple_data(struct pcmcia_socket *s, tuple_t *tuple);
|
||||
|
||||
|
||||
#ifdef CONFIG_PCMCIA_IOCTL
|
||||
/* ds.c */
|
||||
extern struct pcmcia_device *pcmcia_get_dev(struct pcmcia_device *p_dev);
|
||||
extern void pcmcia_put_dev(struct pcmcia_device *p_dev);
|
||||
|
||||
struct pcmcia_device *pcmcia_device_add(struct pcmcia_socket *s,
|
||||
unsigned int function);
|
||||
|
||||
/* pcmcia_ioctl.c */
|
||||
extern void __init pcmcia_setup_ioctl(void);
|
||||
extern void __exit pcmcia_cleanup_ioctl(void);
|
||||
extern void handle_event(struct pcmcia_socket *s, event_t event);
|
||||
extern int handle_request(struct pcmcia_socket *s, event_t event);
|
||||
|
||||
#else /* CONFIG_PCMCIA_IOCTL */
|
||||
|
||||
static inline void __init pcmcia_setup_ioctl(void) { return; }
|
||||
static inline void __exit pcmcia_cleanup_ioctl(void) { return; }
|
||||
static inline void handle_event(struct pcmcia_socket *s, event_t event)
|
||||
{
|
||||
return;
|
||||
}
|
||||
static inline int handle_request(struct pcmcia_socket *s, event_t event)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
#endif /* CONFIG_PCMCIA_IOCTL */
|
||||
|
||||
#endif /* _LINUX_CS_INTERNAL_H */
|
||||
|
|
|
@ -213,7 +213,7 @@ EXPORT_SYMBOL(pcmcia_unregister_driver);
|
|||
|
||||
/* pcmcia_device handling */
|
||||
|
||||
struct pcmcia_device *pcmcia_get_dev(struct pcmcia_device *p_dev)
|
||||
static struct pcmcia_device *pcmcia_get_dev(struct pcmcia_device *p_dev)
|
||||
{
|
||||
struct device *tmp_dev;
|
||||
tmp_dev = get_device(&p_dev->dev);
|
||||
|
@ -222,7 +222,7 @@ struct pcmcia_device *pcmcia_get_dev(struct pcmcia_device *p_dev)
|
|||
return to_pcmcia_dev(tmp_dev);
|
||||
}
|
||||
|
||||
void pcmcia_put_dev(struct pcmcia_device *p_dev)
|
||||
static void pcmcia_put_dev(struct pcmcia_device *p_dev)
|
||||
{
|
||||
if (p_dev)
|
||||
put_device(&p_dev->dev);
|
||||
|
@ -477,7 +477,8 @@ static int pcmcia_device_query(struct pcmcia_device *p_dev)
|
|||
}
|
||||
|
||||
|
||||
struct pcmcia_device *pcmcia_device_add(struct pcmcia_socket *s, unsigned int function)
|
||||
static struct pcmcia_device *pcmcia_device_add(struct pcmcia_socket *s,
|
||||
unsigned int function)
|
||||
{
|
||||
struct pcmcia_device *p_dev, *tmp_dev;
|
||||
int i;
|
||||
|
@ -885,14 +886,6 @@ static int pcmcia_bus_match(struct device *dev, struct device_driver *drv)
|
|||
}
|
||||
mutex_unlock(&p_drv->dynids.lock);
|
||||
|
||||
#ifdef CONFIG_PCMCIA_IOCTL
|
||||
/* matching by cardmgr */
|
||||
if (p_dev->cardmgr == p_drv) {
|
||||
dev_dbg(dev, "cardmgr matched to %s\n", drv->name);
|
||||
return 1;
|
||||
}
|
||||
#endif
|
||||
|
||||
while (did && did->match_flags) {
|
||||
dev_dbg(dev, "trying to match to %s\n", drv->name);
|
||||
if (pcmcia_devmatch(p_dev, did)) {
|
||||
|
@ -1245,7 +1238,6 @@ static int ds_event(struct pcmcia_socket *skt, event_t event, int priority)
|
|||
case CS_EVENT_CARD_REMOVAL:
|
||||
atomic_set(&skt->present, 0);
|
||||
pcmcia_card_remove(skt, NULL);
|
||||
handle_event(skt, event);
|
||||
mutex_lock(&s->ops_mutex);
|
||||
destroy_cis_cache(s);
|
||||
pcmcia_cleanup_irq(s);
|
||||
|
@ -1259,7 +1251,6 @@ static int ds_event(struct pcmcia_socket *skt, event_t event, int priority)
|
|||
destroy_cis_cache(s); /* to be on the safe side... */
|
||||
mutex_unlock(&s->ops_mutex);
|
||||
pcmcia_card_add(skt);
|
||||
handle_event(skt, event);
|
||||
break;
|
||||
|
||||
case CS_EVENT_EJECTION_REQUEST:
|
||||
|
@ -1280,14 +1271,12 @@ static int ds_event(struct pcmcia_socket *skt, event_t event, int priority)
|
|||
ds_event(skt, CS_EVENT_CARD_INSERTION,
|
||||
CS_EVENT_PRI_LOW);
|
||||
}
|
||||
handle_event(skt, event);
|
||||
break;
|
||||
|
||||
case CS_EVENT_PM_SUSPEND:
|
||||
case CS_EVENT_RESET_PHYSICAL:
|
||||
case CS_EVENT_CARD_RESET:
|
||||
default:
|
||||
handle_event(skt, event);
|
||||
break;
|
||||
}
|
||||
|
||||
|
@ -1350,9 +1339,6 @@ static int __devinit pcmcia_bus_add_socket(struct device *dev,
|
|||
return ret;
|
||||
}
|
||||
|
||||
#ifdef CONFIG_PCMCIA_IOCTL
|
||||
init_waitqueue_head(&socket->queue);
|
||||
#endif
|
||||
INIT_LIST_HEAD(&socket->devices_list);
|
||||
memset(&socket->pcmcia_state, 0, sizeof(u8));
|
||||
socket->device_count = 0;
|
||||
|
@ -1429,8 +1415,6 @@ static int __init init_pcmcia_bus(void)
|
|||
return ret;
|
||||
}
|
||||
|
||||
pcmcia_setup_ioctl();
|
||||
|
||||
return 0;
|
||||
}
|
||||
fs_initcall(init_pcmcia_bus); /* one level after subsys_initcall so that
|
||||
|
@ -1439,8 +1423,6 @@ fs_initcall(init_pcmcia_bus); /* one level after subsys_initcall so that
|
|||
|
||||
static void __exit exit_pcmcia_bus(void)
|
||||
{
|
||||
pcmcia_cleanup_ioctl();
|
||||
|
||||
class_interface_unregister(&pcmcia_bus_interface);
|
||||
|
||||
bus_unregister(&pcmcia_bus_type);
|
||||
|
|
File diff suppressed because it is too large
Load diff
|
@ -164,8 +164,6 @@ struct pccard_resource_ops pccard_iodyn_ops = {
|
|||
.validate_mem = NULL,
|
||||
.find_io = iodyn_find_io,
|
||||
.find_mem = NULL,
|
||||
.add_io = NULL,
|
||||
.add_mem = NULL,
|
||||
.init = static_init,
|
||||
.exit = NULL,
|
||||
};
|
||||
|
|
|
@ -62,8 +62,6 @@ struct pccard_resource_ops pccard_static_ops = {
|
|||
.validate_mem = NULL,
|
||||
.find_io = static_find_io,
|
||||
.find_mem = NULL,
|
||||
.add_io = NULL,
|
||||
.add_mem = NULL,
|
||||
.init = static_init,
|
||||
.exit = NULL,
|
||||
};
|
||||
|
|
|
@ -1055,8 +1055,6 @@ struct pccard_resource_ops pccard_nonstatic_ops = {
|
|||
.validate_mem = pcmcia_nonstatic_validate_mem,
|
||||
.find_io = nonstatic_find_io,
|
||||
.find_mem = nonstatic_find_mem_region,
|
||||
.add_io = adjust_io,
|
||||
.add_mem = adjust_memory,
|
||||
.init = nonstatic_init,
|
||||
.exit = nonstatic_release_resource_db,
|
||||
};
|
||||
|
|
|
@ -117,11 +117,6 @@ struct pcmcia_device {
|
|||
u64 dma_mask;
|
||||
struct device dev;
|
||||
|
||||
#ifdef CONFIG_PCMCIA_IOCTL
|
||||
/* device driver wanted by cardmgr */
|
||||
struct pcmcia_driver *cardmgr;
|
||||
#endif
|
||||
|
||||
/* data private to drivers */
|
||||
void *priv;
|
||||
};
|
||||
|
@ -211,208 +206,4 @@ void pcmcia_disable_device(struct pcmcia_device *p_dev);
|
|||
|
||||
#endif /* __KERNEL__ */
|
||||
|
||||
|
||||
|
||||
/* Below, there are only definitions which are used by
|
||||
* - the PCMCIA ioctl
|
||||
* - deprecated PCMCIA userspace tools only
|
||||
*
|
||||
* here be dragons ... here be dragons ... here be dragons ... here be drag
|
||||
*/
|
||||
|
||||
#if defined(CONFIG_PCMCIA_IOCTL) || !defined(__KERNEL__)
|
||||
|
||||
#if defined(__arm__) || defined(__mips__) || defined(__avr32__) || \
|
||||
defined(__bfin__)
|
||||
/* This (ioaddr_t) is exposed to userspace & hence cannot be changed. */
|
||||
typedef u_int ioaddr_t;
|
||||
#else
|
||||
typedef u_short ioaddr_t;
|
||||
#endif
|
||||
|
||||
/* for AdjustResourceInfo */
|
||||
typedef struct adjust_t {
|
||||
u_int Action;
|
||||
u_int Resource;
|
||||
u_int Attributes;
|
||||
union {
|
||||
struct memory {
|
||||
u_long Base;
|
||||
u_long Size;
|
||||
} memory;
|
||||
struct io {
|
||||
ioaddr_t BasePort;
|
||||
ioaddr_t NumPorts;
|
||||
u_int IOAddrLines;
|
||||
} io;
|
||||
struct irq {
|
||||
u_int IRQ;
|
||||
} irq;
|
||||
} resource;
|
||||
} adjust_t;
|
||||
|
||||
/* Action field */
|
||||
#define REMOVE_MANAGED_RESOURCE 1
|
||||
#define ADD_MANAGED_RESOURCE 2
|
||||
#define GET_FIRST_MANAGED_RESOURCE 3
|
||||
#define GET_NEXT_MANAGED_RESOURCE 4
|
||||
/* Resource field */
|
||||
#define RES_MEMORY_RANGE 1
|
||||
#define RES_IO_RANGE 2
|
||||
#define RES_IRQ 3
|
||||
/* Attribute field */
|
||||
#define RES_IRQ_TYPE 0x03
|
||||
#define RES_IRQ_TYPE_EXCLUSIVE 0
|
||||
#define RES_IRQ_TYPE_TIME 1
|
||||
#define RES_IRQ_TYPE_DYNAMIC 2
|
||||
#define RES_IRQ_CSC 0x04
|
||||
#define RES_SHARED 0x08
|
||||
#define RES_RESERVED 0x10
|
||||
#define RES_ALLOCATED 0x20
|
||||
#define RES_REMOVED 0x40
|
||||
|
||||
|
||||
typedef struct tuple_parse_t {
|
||||
tuple_t tuple;
|
||||
cisdata_t data[255];
|
||||
cisparse_t parse;
|
||||
} tuple_parse_t;
|
||||
|
||||
typedef struct win_info_t {
|
||||
window_handle_t handle;
|
||||
win_req_t window;
|
||||
memreq_t map;
|
||||
} win_info_t;
|
||||
|
||||
typedef struct bind_info_t {
|
||||
dev_info_t dev_info;
|
||||
u_char function;
|
||||
struct pcmcia_device *instance;
|
||||
char name[DEV_NAME_LEN];
|
||||
u_short major, minor;
|
||||
void *next;
|
||||
} bind_info_t;
|
||||
|
||||
typedef struct mtd_info_t {
|
||||
dev_info_t dev_info;
|
||||
u_int Attributes;
|
||||
u_int CardOffset;
|
||||
} mtd_info_t;
|
||||
|
||||
typedef struct region_info_t {
|
||||
u_int Attributes;
|
||||
u_int CardOffset;
|
||||
u_int RegionSize;
|
||||
u_int AccessSpeed;
|
||||
u_int BlockSize;
|
||||
u_int PartMultiple;
|
||||
u_char JedecMfr, JedecInfo;
|
||||
memory_handle_t next;
|
||||
} region_info_t;
|
||||
|
||||
#define REGION_TYPE 0x0001
|
||||
#define REGION_TYPE_CM 0x0000
|
||||
#define REGION_TYPE_AM 0x0001
|
||||
#define REGION_PREFETCH 0x0008
|
||||
#define REGION_CACHEABLE 0x0010
|
||||
#define REGION_BAR_MASK 0xe000
|
||||
#define REGION_BAR_SHIFT 13
|
||||
|
||||
/* For ReplaceCIS */
|
||||
typedef struct cisdump_t {
|
||||
u_int Length;
|
||||
cisdata_t Data[CISTPL_MAX_CIS_SIZE];
|
||||
} cisdump_t;
|
||||
|
||||
/* for GetConfigurationInfo */
|
||||
typedef struct config_info_t {
|
||||
u_char Function;
|
||||
u_int Attributes;
|
||||
u_int Vcc, Vpp1, Vpp2;
|
||||
u_int IntType;
|
||||
u_int ConfigBase;
|
||||
u_char Status, Pin, Copy, Option, ExtStatus;
|
||||
u_int Present;
|
||||
u_int CardValues;
|
||||
u_int AssignedIRQ;
|
||||
u_int IRQAttributes;
|
||||
ioaddr_t BasePort1;
|
||||
ioaddr_t NumPorts1;
|
||||
u_int Attributes1;
|
||||
ioaddr_t BasePort2;
|
||||
ioaddr_t NumPorts2;
|
||||
u_int Attributes2;
|
||||
u_int IOAddrLines;
|
||||
} config_info_t;
|
||||
|
||||
/* For ValidateCIS */
|
||||
typedef struct cisinfo_t {
|
||||
u_int Chains;
|
||||
} cisinfo_t;
|
||||
|
||||
typedef struct cs_status_t {
|
||||
u_char Function;
|
||||
event_t CardState;
|
||||
event_t SocketState;
|
||||
} cs_status_t;
|
||||
|
||||
typedef union ds_ioctl_arg_t {
|
||||
adjust_t adjust;
|
||||
config_info_t config;
|
||||
tuple_t tuple;
|
||||
tuple_parse_t tuple_parse;
|
||||
client_req_t client_req;
|
||||
cs_status_t status;
|
||||
conf_reg_t conf_reg;
|
||||
cisinfo_t cisinfo;
|
||||
region_info_t region;
|
||||
bind_info_t bind_info;
|
||||
mtd_info_t mtd_info;
|
||||
win_info_t win_info;
|
||||
cisdump_t cisdump;
|
||||
} ds_ioctl_arg_t;
|
||||
|
||||
#define DS_ADJUST_RESOURCE_INFO _IOWR('d', 2, adjust_t)
|
||||
#define DS_GET_CONFIGURATION_INFO _IOWR('d', 3, config_info_t)
|
||||
#define DS_GET_FIRST_TUPLE _IOWR('d', 4, tuple_t)
|
||||
#define DS_GET_NEXT_TUPLE _IOWR('d', 5, tuple_t)
|
||||
#define DS_GET_TUPLE_DATA _IOWR('d', 6, tuple_parse_t)
|
||||
#define DS_PARSE_TUPLE _IOWR('d', 7, tuple_parse_t)
|
||||
#define DS_RESET_CARD _IO ('d', 8)
|
||||
#define DS_GET_STATUS _IOWR('d', 9, cs_status_t)
|
||||
#define DS_ACCESS_CONFIGURATION_REGISTER _IOWR('d', 10, conf_reg_t)
|
||||
#define DS_VALIDATE_CIS _IOR ('d', 11, cisinfo_t)
|
||||
#define DS_SUSPEND_CARD _IO ('d', 12)
|
||||
#define DS_RESUME_CARD _IO ('d', 13)
|
||||
#define DS_EJECT_CARD _IO ('d', 14)
|
||||
#define DS_INSERT_CARD _IO ('d', 15)
|
||||
#define DS_GET_FIRST_REGION _IOWR('d', 16, region_info_t)
|
||||
#define DS_GET_NEXT_REGION _IOWR('d', 17, region_info_t)
|
||||
#define DS_REPLACE_CIS _IOWR('d', 18, cisdump_t)
|
||||
#define DS_GET_FIRST_WINDOW _IOR ('d', 19, win_info_t)
|
||||
#define DS_GET_NEXT_WINDOW _IOWR('d', 20, win_info_t)
|
||||
#define DS_GET_MEM_PAGE _IOWR('d', 21, win_info_t)
|
||||
|
||||
#define DS_BIND_REQUEST _IOWR('d', 60, bind_info_t)
|
||||
#define DS_GET_DEVICE_INFO _IOWR('d', 61, bind_info_t)
|
||||
#define DS_GET_NEXT_DEVICE _IOWR('d', 62, bind_info_t)
|
||||
#define DS_UNBIND_REQUEST _IOW ('d', 63, bind_info_t)
|
||||
#define DS_BIND_MTD _IOWR('d', 64, mtd_info_t)
|
||||
|
||||
|
||||
/* used in userspace only */
|
||||
#define CS_IN_USE 0x1e
|
||||
|
||||
#define INFO_MASTER_CLIENT 0x01
|
||||
#define INFO_IO_CLIENT 0x02
|
||||
#define INFO_MTD_CLIENT 0x04
|
||||
#define INFO_MEM_CLIENT 0x08
|
||||
#define MAX_NUM_CLIENTS 3
|
||||
|
||||
#define INFO_CARD_SHARE 0x10
|
||||
#define INFO_CARD_EXCL 0x20
|
||||
|
||||
|
||||
#endif /* !defined(__KERNEL__) || defined(CONFIG_PCMCIA_IOCTL) */
|
||||
|
||||
#endif /* _LINUX_DS_H */
|
||||
|
|
|
@ -220,12 +220,10 @@ struct pcmcia_socket {
|
|||
|
||||
/* 16-bit state: */
|
||||
struct {
|
||||
/* "master" ioctl is used */
|
||||
u8 busy:1;
|
||||
/* the PCMCIA card consists of two pseudo devices */
|
||||
u8 has_pfc:1;
|
||||
|
||||
u8 reserved:6;
|
||||
u8 reserved:7;
|
||||
} pcmcia_state;
|
||||
|
||||
/* non-zero if PCMCIA card is present */
|
||||
|
@ -234,10 +232,6 @@ struct pcmcia_socket {
|
|||
/* IRQ to be used by PCMCIA devices. May not be IRQ 0. */
|
||||
unsigned int pcmcia_irq;
|
||||
|
||||
#ifdef CONFIG_PCMCIA_IOCTL
|
||||
struct user_info_t *user;
|
||||
wait_queue_head_t queue;
|
||||
#endif /* CONFIG_PCMCIA_IOCTL */
|
||||
#endif /* CONFIG_PCMCIA */
|
||||
|
||||
/* socket device */
|
||||
|
|
Loading…
Reference in a new issue