diff options
Diffstat (limited to 'mdk-stage1/pcmcia/cs.h')
| -rw-r--r-- | mdk-stage1/pcmcia/cs.h | 433 | 
1 files changed, 433 insertions, 0 deletions
| diff --git a/mdk-stage1/pcmcia/cs.h b/mdk-stage1/pcmcia/cs.h new file mode 100644 index 000000000..9abeac216 --- /dev/null +++ b/mdk-stage1/pcmcia/cs.h @@ -0,0 +1,433 @@ +/* + * cs.h 1.73 2001/08/24 12:16:12 + * + * The contents of this file are subject to the Mozilla Public License + * Version 1.1 (the "License"); you may not use this file except in + * compliance with the License. You may obtain a copy of the License + * at http://www.mozilla.org/MPL/ + * + * Software distributed under the License is distributed on an "AS IS" + * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See + * the License for the specific language governing rights and + * limitations under the License.  + * + * The initial developer of the original code is David A. Hinds + * <dahinds@users.sourceforge.net>.  Portions created by David A. Hinds + * are Copyright (C) 1999 David A. Hinds.  All Rights Reserved. + * + * Alternatively, the contents of this file may be used under the + * terms of the GNU General Public License version 2 (the "GPL"), in + * which case the provisions of the GPL are applicable instead of the + * above.  If you wish to allow the use of your version of this file + * only under the terms of the GPL and not to allow others to use + * your version of this file under the MPL, indicate your decision by + * deleting the provisions above and replace them with the notice and + * other provisions required by the GPL.  If you do not delete the + * provisions above, a recipient may use your version of this file + * under either the MPL or the GPL. + */ + +#ifndef _LINUX_CS_H +#define _LINUX_CS_H + +/* For AccessConfigurationRegister */ +typedef struct conf_reg_t { +    u_char	Function; +    u_int	Action; +    off_t	Offset; +    u_int	Value; +} conf_reg_t; + +/* Actions */ +#define CS_READ		1 +#define CS_WRITE	2 + +/* for AdjustResourceInfo */ +typedef struct adjust_t { +    u_int	Action; +    u_int	Resource; +    u_int	Attributes; +    union { +	struct memory { +	    unsigned long	Base; +	    unsigned 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 servinfo_t { +    char	Signature[2]; +    u_int	Count; +    u_int	Revision; +    u_int	CSLevel; +    char	*VendorString; +} servinfo_t; + +typedef struct event_callback_args_t { +    client_handle_t client_handle; +    void	*info; +    void	*mtdrequest; +    void	*buffer; +    void	*misc; +    void	*client_data; +    struct bus_operations *bus; +} event_callback_args_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 CardValues field */ +#define CV_OPTION_VALUE		0x01 +#define CV_STATUS_VALUE		0x02 +#define CV_PIN_REPLACEMENT	0x04 +#define CV_COPY_VALUE		0x08 +#define CV_EXT_STATUS		0x10 + +/* For GetFirst/NextClient */ +typedef struct client_req_t { +    socket_t	Socket; +    u_int	Attributes; +} client_req_t; + +#define CLIENT_THIS_SOCKET	0x01 + +/* For RegisterClient */ +typedef struct client_reg_t { +    dev_info_t	*dev_info; +    u_int	Attributes; +    u_int	EventMask; +    int		(*event_handler)(event_t event, int priority, +				 event_callback_args_t *); +    event_callback_args_t event_callback_args; +    u_int	Version; +} client_reg_t; + +/* ModifyConfiguration */ +typedef struct modconf_t { +    u_int	Attributes; +    u_int	Vcc, Vpp1, Vpp2; +} modconf_t; + +/* Attributes for ModifyConfiguration */ +#define CONF_IRQ_CHANGE_VALID	0x100 +#define CONF_VCC_CHANGE_VALID	0x200 +#define CONF_VPP1_CHANGE_VALID	0x400 +#define CONF_VPP2_CHANGE_VALID	0x800 + +/* For RequestConfiguration */ +typedef struct config_req_t { +    u_int	Attributes; +    u_int	Vcc, Vpp1, Vpp2; +    u_int	IntType; +    u_int	ConfigBase; +    u_char	Status, Pin, Copy, ExtStatus; +    u_char	ConfigIndex; +    u_int	Present; +} config_req_t; + +/* Attributes for RequestConfiguration */ +#define CONF_ENABLE_IRQ		0x01 +#define CONF_ENABLE_DMA		0x02 +#define CONF_ENABLE_SPKR	0x04 +#define CONF_VALID_CLIENT	0x100 + +/* IntType field */ +#define INT_MEMORY		0x01 +#define INT_MEMORY_AND_IO	0x02 +#define INT_CARDBUS		0x04 +#define INT_ZOOMED_VIDEO	0x08 + +/* For RequestIO and ReleaseIO */ +typedef struct io_req_t { +    ioaddr_t	BasePort1; +    ioaddr_t	NumPorts1; +    u_int	Attributes1; +    ioaddr_t	BasePort2; +    ioaddr_t	NumPorts2; +    u_int	Attributes2; +    u_int	IOAddrLines; +} io_req_t; + +/* Attributes for RequestIO and ReleaseIO */ +#define IO_SHARED		0x01 +#define IO_FIRST_SHARED		0x02 +#define IO_FORCE_ALIAS_ACCESS	0x04 +#define IO_DATA_PATH_WIDTH	0x18 +#define IO_DATA_PATH_WIDTH_8	0x00 +#define IO_DATA_PATH_WIDTH_16	0x08 +#define IO_DATA_PATH_WIDTH_AUTO	0x10 + +/* For RequestIRQ and ReleaseIRQ */ +typedef struct irq_req_t { +    u_int	Attributes; +    u_int	AssignedIRQ; +    u_int	IRQInfo1, IRQInfo2; +    void	*Handler; +    void	*Instance; +} irq_req_t; + +/* Attributes for RequestIRQ and ReleaseIRQ */ +#define IRQ_TYPE			0x03 +#define IRQ_TYPE_EXCLUSIVE		0x00 +#define IRQ_TYPE_TIME			0x01 +#define IRQ_TYPE_DYNAMIC_SHARING	0x02 +#define IRQ_FORCED_PULSE		0x04 +#define IRQ_FIRST_SHARED		0x08 +#define IRQ_HANDLE_PRESENT		0x10 +#define IRQ_PULSE_ALLOCATED		0x100 + +/* Bits in IRQInfo1 field */ +#define IRQ_MASK		0x0f +#define IRQ_NMI_ID		0x01 +#define IRQ_IOCK_ID		0x02 +#define IRQ_BERR_ID		0x04 +#define IRQ_VEND_ID		0x08 +#define IRQ_INFO2_VALID		0x10 +#define IRQ_LEVEL_ID		0x20 +#define IRQ_PULSE_ID		0x40 +#define IRQ_SHARE_ID		0x80 + +typedef struct eventmask_t { +    u_int	Attributes; +    u_int	EventMask; +} eventmask_t; + +#define CONF_EVENT_MASK_VALID	0x01 + +/* Configuration registers present */ +#define PRESENT_OPTION		0x001 +#define PRESENT_STATUS		0x002 +#define PRESENT_PIN_REPLACE	0x004 +#define PRESENT_COPY		0x008 +#define PRESENT_EXT_STATUS	0x010 +#define PRESENT_IOBASE_0	0x020 +#define PRESENT_IOBASE_1	0x040 +#define PRESENT_IOBASE_2	0x080 +#define PRESENT_IOBASE_3	0x100 +#define PRESENT_IOSIZE		0x200 + +/* For GetMemPage, MapMemPage */ +typedef struct memreq_t { +    u_int	CardOffset; +    page_t	Page; +} memreq_t; + +/* For ModifyWindow */ +typedef struct modwin_t { +    u_int	Attributes; +    u_int	AccessSpeed; +} modwin_t; + +/* For RequestWindow */ +typedef struct win_req_t { +    u_int	Attributes; +    unsigned long	Base; +    u_int	Size; +    u_int	AccessSpeed; +} win_req_t; + +/* Attributes for RequestWindow */ +#define WIN_ADDR_SPACE		0x0001 +#define WIN_ADDR_SPACE_MEM	0x0000 +#define WIN_ADDR_SPACE_IO	0x0001 +#define WIN_MEMORY_TYPE		0x0002 +#define WIN_MEMORY_TYPE_CM	0x0000 +#define WIN_MEMORY_TYPE_AM	0x0002 +#define WIN_ENABLE		0x0004 +#define WIN_DATA_WIDTH		0x0018 +#define WIN_DATA_WIDTH_8	0x0000 +#define WIN_DATA_WIDTH_16	0x0008 +#define WIN_DATA_WIDTH_32	0x0010 +#define WIN_PAGED		0x0020 +#define WIN_SHARED		0x0040 +#define WIN_FIRST_SHARED	0x0080 +#define WIN_USE_WAIT		0x0100 +#define WIN_STRICT_ALIGN	0x0200 +#define WIN_MAP_BELOW_1MB	0x0400 +#define WIN_PREFETCH		0x0800 +#define WIN_CACHEABLE		0x1000 +#define WIN_BAR_MASK		0xe000 +#define WIN_BAR_SHIFT		13 + +/* Attributes for RegisterClient */ +#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 + +typedef struct cs_status_t { +    u_char	Function; +    event_t 	CardState; +    event_t	SocketState; +} cs_status_t; + +typedef struct error_info_t { +    int		func; +    int		retcode; +} error_info_t; + +/* Special stuff for binding drivers to sockets */ +typedef struct bind_req_t { +    socket_t	Socket; +    u_char	Function; +    dev_info_t	*dev_info; +} bind_req_t; + +/* Flag to bind to all functions */ +#define BIND_FN_ALL	0xff + +typedef struct mtd_bind_t { +    socket_t	Socket; +    u_int	Attributes; +    u_int	CardOffset; +    dev_info_t	*dev_info; +} mtd_bind_t; + +/* Events */ +#define CS_EVENT_PRI_LOW		0 +#define CS_EVENT_PRI_HIGH		1 + +#define CS_EVENT_WRITE_PROTECT		0x000001 +#define CS_EVENT_CARD_LOCK		0x000002 +#define CS_EVENT_CARD_INSERTION		0x000004 +#define CS_EVENT_CARD_REMOVAL		0x000008 +#define CS_EVENT_BATTERY_DEAD		0x000010 +#define CS_EVENT_BATTERY_LOW		0x000020 +#define CS_EVENT_READY_CHANGE		0x000040 +#define CS_EVENT_CARD_DETECT		0x000080 +#define CS_EVENT_RESET_REQUEST		0x000100 +#define CS_EVENT_RESET_PHYSICAL		0x000200 +#define CS_EVENT_CARD_RESET		0x000400 +#define CS_EVENT_REGISTRATION_COMPLETE	0x000800 +#define CS_EVENT_RESET_COMPLETE		0x001000 +#define CS_EVENT_PM_SUSPEND		0x002000 +#define CS_EVENT_PM_RESUME		0x004000 +#define CS_EVENT_INSERTION_REQUEST	0x008000 +#define CS_EVENT_EJECTION_REQUEST	0x010000 +#define CS_EVENT_MTD_REQUEST		0x020000 +#define CS_EVENT_ERASE_COMPLETE		0x040000 +#define CS_EVENT_REQUEST_ATTENTION	0x080000 +#define CS_EVENT_CB_DETECT		0x100000 +#define CS_EVENT_3VCARD			0x200000 +#define CS_EVENT_XVCARD			0x400000 + +/* Return codes */ +#define CS_SUCCESS		0x00 +#define CS_BAD_ADAPTER		0x01 +#define CS_BAD_ATTRIBUTE	0x02 +#define CS_BAD_BASE		0x03 +#define CS_BAD_EDC		0x04 +#define CS_BAD_IRQ		0x06 +#define CS_BAD_OFFSET		0x07 +#define CS_BAD_PAGE		0x08 +#define CS_READ_FAILURE		0x09 +#define CS_BAD_SIZE		0x0a +#define CS_BAD_SOCKET		0x0b +#define CS_BAD_TYPE		0x0d +#define CS_BAD_VCC		0x0e +#define CS_BAD_VPP		0x0f +#define CS_BAD_WINDOW		0x11 +#define CS_WRITE_FAILURE	0x12 +#define CS_NO_CARD		0x14 +#define CS_UNSUPPORTED_FUNCTION	0x15 +#define CS_UNSUPPORTED_MODE	0x16 +#define CS_BAD_SPEED		0x17 +#define CS_BUSY			0x18 +#define CS_GENERAL_FAILURE	0x19 +#define CS_WRITE_PROTECTED	0x1a +#define CS_BAD_ARG_LENGTH	0x1b +#define CS_BAD_ARGS		0x1c +#define CS_CONFIGURATION_LOCKED	0x1d +#define CS_IN_USE		0x1e +#define CS_NO_MORE_ITEMS	0x1f +#define CS_OUT_OF_RESOURCE	0x20 +#define CS_BAD_HANDLE		0x21 + +#define CS_BAD_TUPLE		0x40 + +#ifdef __KERNEL__ + +/* + *  The main Card Services entry point + */ + +enum service { +    AccessConfigurationRegister, AddSocketServices, +    AdjustResourceInfo, CheckEraseQueue, CloseMemory, CopyMemory, +    DeregisterClient, DeregisterEraseQueue, GetCardServicesInfo, +    GetClientInfo, GetConfigurationInfo, GetEventMask, +    GetFirstClient, GetFirstPartion, GetFirstRegion, GetFirstTuple, +    GetNextClient, GetNextPartition, GetNextRegion, GetNextTuple, +    GetStatus, GetTupleData, MapLogSocket, MapLogWindow, MapMemPage, +    MapPhySocket, MapPhyWindow, ModifyConfiguration, ModifyWindow, +    OpenMemory, ParseTuple, ReadMemory, RegisterClient, +    RegisterEraseQueue, RegisterMTD, RegisterTimer, +    ReleaseConfiguration, ReleaseExclusive, ReleaseIO, ReleaseIRQ, +    ReleaseSocketMask, ReleaseWindow, ReplaceSocketServices, +    RequestConfiguration, RequestExclusive, RequestIO, RequestIRQ, +    RequestSocketMask, RequestWindow, ResetCard, ReturnSSEntry, +    SetEventMask, SetRegion, ValidateCIS, VendorSpecific, +    WriteMemory, BindDevice, BindMTD, ReportError, +    SuspendCard, ResumeCard, EjectCard, InsertCard, ReplaceCIS, +    GetFirstWindow, GetNextWindow, GetMemPage +}; + +#ifdef IN_CARD_SERVICES +extern int CardServices(int func, void *a1, void *a2, void *a3); +#else +extern int CardServices(int func, ...); +#endif + +#endif /* __KERNEL__ */ + +#endif /* _LINUX_CS_H */ | 
