summaryrefslogtreecommitdiff
path: root/static/netbsd/man9/pcmcia.9
diff options
context:
space:
mode:
Diffstat (limited to 'static/netbsd/man9/pcmcia.9')
-rw-r--r--static/netbsd/man9/pcmcia.9431
1 files changed, 431 insertions, 0 deletions
diff --git a/static/netbsd/man9/pcmcia.9 b/static/netbsd/man9/pcmcia.9
new file mode 100644
index 00000000..9eac0cfb
--- /dev/null
+++ b/static/netbsd/man9/pcmcia.9
@@ -0,0 +1,431 @@
+.\" $NetBSD: pcmcia.9,v 1.22 2018/02/11 14:17:24 wiz Exp $
+.\"
+.\" Copyright (c) 2001 The NetBSD Foundation, Inc.
+.\" All rights reserved.
+.\"
+.\" This code is derived from software contributed to The NetBSD Foundation
+.\" by Gregory McGarry.
+.\"
+.\" Redistribution and use in source and binary forms, with or without
+.\" modification, are permitted provided that the following conditions
+.\" are met:
+.\" 1. Redistributions of source code must retain the above copyright
+.\" notice, this list of conditions and the following disclaimer.
+.\" 2. Redistributions in binary form must reproduce the above copyright
+.\" notice, this list of conditions and the following disclaimer in the
+.\" documentation and/or other materials provided with the distribution.
+.\"
+.\" THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
+.\" ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
+.\" TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+.\" PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
+.\" BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+.\" CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+.\" SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+.\" INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+.\" CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+.\" ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+.\" POSSIBILITY OF SUCH DAMAGE.
+.\"
+.Dd April 15, 2010
+.Dt PCMCIA 9
+.Os
+.Sh NAME
+.Nm PCMCIA ,
+.Nm pcmcia_function_init ,
+.Nm pcmcia_function_enable ,
+.Nm pcmcia_function_disable ,
+.Nm pcmcia_io_alloc ,
+.Nm pcmcia_io_free ,
+.Nm pcmcia_io_map ,
+.Nm pcmcia_io_unmap ,
+.Nm pcmcia_mem_alloc ,
+.Nm pcmcia_mem_free ,
+.Nm pcmcia_mem_map ,
+.Nm pcmcia_mem_unmap ,
+.Nm pcmcia_intr_establish ,
+.Nm pcmcia_intr_disestablish ,
+.Nm pcmcia_cis_read_1 ,
+.Nm pcmcia_cis_read_2 ,
+.Nm pcmcia_cis_read_3 ,
+.Nm pcmcia_cis_read_4 ,
+.Nm pcmcia_cis_read_n ,
+.Nm pcmcia_scan_cis
+.Nd support for PCMCIA PC-Card devices
+.Sh SYNOPSIS
+.In sys/bus.h
+.In dev/pcmcia/pcmciareg.h
+.In dev/pcmcia/pcmciavar.h
+.In dev/pcmcia/pcmciadevs.h
+.Ft void
+.Fn pcmcia_function_init "struct pcmcia_function *pf" \
+"struct pcmcia_config_entry *cfe"
+.Ft int
+.Fn pcmcia_function_enable "struct pcmcia_function *pf"
+.Ft void
+.Fn pcmcia_function_disable "struct pcmcia_function *pf"
+.Ft int
+.Fn pcmcia_io_alloc "struct pcmcia_function *pf" "bus_addr_t start" \
+"bus_size_t size" "bus_size_t align" "struct pcmcia_io_handle *pciop"
+.Ft void
+.Fn pcmcia_io_free "struct pcmcia_function *pf" \
+"struct pcmcia_io_handle *pcihp"
+.Ft int
+.Fn pcmcia_io_map "struct pcmcia_function *pf" "int width" \
+"struct pcmcia_io_handle *pcihp" "int *windowp"
+.Ft void
+.Fn pcmcia_io_unmap "struct pcmcia_function *pf" "int window"
+.Ft int
+.Fn pcmcia_mem_alloc "struct pcmcia_function *pf" "bus_size_t size" \
+"struct pcmcia_mem_handle *pcmhp"
+.Ft void
+.Fn pcmcia_mem_free "struct pcmcia_function *pf" \
+"struct pcmcia_mem_handle *pcmhp"
+.Ft int
+.Fn pcmcia_mem_map "struct pcmcia_function *pf" "int width" \
+"bus_addr_t card_addr" "bus_size_t size" "struct pcmcia_mem_handle *pcmhp" \
+"bus_size_t *offsetp" "int *windowp"
+.Ft void
+.Fn pcmcia_mem_unmap "struct pcmcia_function *pf" "int window"
+.Ft void *
+.Fn pcmcia_intr_establish "struct pcmcia_function *pf" "int level" \
+"int (*handler)(void *)" "void *arg"
+.Ft void
+.Fn pcmcia_intr_disestablish "struct pcmcia_function *pf" "void *ih"
+.Ft uint8_t
+.Fn pcmcia_cis_read_1 "struct pcmcia_tuple *tuple" "int index"
+.Ft uint16_t
+.Fn pcmcia_cis_read_2 "struct pcmcia_tuple *tuple" "int index"
+.Ft uint32_t
+.Fn pcmcia_cis_read_3 "struct pcmcia_tuple *tuple" "int index"
+.Ft uint32_t
+.Fn pcmcia_cis_read_4 "struct pcmcia_tuple *tuple" "int index"
+.Ft uint32_t
+.Fn pcmcia_cis_read_n "struct pcmcia_tuple *tuple" "int number" "int index"
+.Ft int
+.Fn pcmcia_scan_cis "struct device *dev" \
+"int (*func)(struct pcmcia_tuple *, void *)" "void *arg"
+.Sh DESCRIPTION
+The machine-independent
+.Nm
+subsystem provides support for PC-Card devices defined by the Personal
+Computer Memory Card International Association (PCMCIA).
+The
+.Nm
+bus supports insertion and removal of cards while a system is
+powered-on (ie, dynamic reconfiguration).
+The socket must be powered-off when a card is not present.
+To the user, this appears as though the socket is "hot" during
+insertion and removal events.
+.Pp
+A PCMCIA controller interfaces the PCMCIA bus with the ISA or PCI
+busses on the host system.
+The controller is responsible for detecting and enabling devices and
+for allocating and mapping resources such as memory and interrupts
+to devices on the PCMCIA bus.
+.Pp
+Each device has a table called the Card Information Structure (CIS)
+which contains configuration information.
+The tuples in the CIS are used by the controller to uniquely identify
+the device.
+Additional information may be present in the CIS, such as the ethernet
+MAC address, that can be accessed and used within a device driver.
+.Pp
+Devices on the PCMCIA bus are uniquely identified by a 32-bit
+manufacturer ID and a 32-bit product ID.
+Additionally, devices can perform multiple functions (such as ethernet
+and modem) and these functions are identified by a function ID.
+.Pp
+PCMCIA devices do not support DMA, however memory on the device can be
+mapped into the address space of the host.
+.Sh DATA TYPES
+Drivers attached to the
+.Nm
+bus will make use of the following data types:
+.Bl -tag -width compact
+.It Fa struct pcmcia_card
+Devices (cards) have their identity recorded in this structure.
+It contains the following members:
+.Bd -literal
+ char *cis1_info[4];
+ int32_t manufacturer;
+ int32_t product;
+ uint16_t error;
+ SIMPLEQ_HEAD(, pcmcia_function) pf_head;
+.Ed
+.It Fa struct pcmcia_function
+Identifies the function of the devices.
+A device can have multiple functions.
+Consider it an opaque type for identifying a particular function
+of a device.
+.It struct pcmcia_config_entry
+Contains information about the resources requested by the device.
+It contains the following members:
+.Bd -literal
+ int number;
+ uint32_t flags;
+ int iftype;
+ int num_iospace;
+ u_long iomask;
+ struct {
+ u_long length;
+ u_long start;
+ } iospace[4];
+ uint16_t irqmask;
+ int num_memspace;
+ struct {
+ u_long length;
+ u_long cardaddr;
+ u_long hostaddr;
+ } memspace[2];
+ int maxtwins;
+ SIMPLEQ_ENTRY(pcmcia_config_entry) cfe_list;
+.Ed
+.It Fa struct pcmcia_tuple
+A handle for identifying an entry in the CIS.
+.It Fa struct pcmcia_io_handle
+A handle for mapping and allocating I/O address spaces.
+It contains the tag and handle for accessing the bus-space.
+.It Fa struct pcmcia_mem_handle
+A handle for mapping and allocating memory address spaces.
+It contains the tag and handle for accessing the bus-space.
+.It Fa struct pcmcia_attach_args
+A structure used to inform the driver of the
+device properties.
+It contains the following members:
+.Bd -literal
+ int32_t manufacturer;
+ int32_t product;
+ struct pcmcia_card *card;
+ struct pcmcia_function *pf;
+.Ed
+.El
+.Sh FUNCTIONS
+.Bl -tag -width compact
+.It Fn pcmcia_function_init "pf" "cfe"
+Initialise the machine-independent
+.Nm
+state with the config entry
+.Fa cfe .
+.It Fn pcmcia_function_enable "pf"
+Provide power to the socket containing the device specified by
+device function
+.Fa pf .
+.It Fn pcmcia_function_disable "pf"
+Remove power from the socket containing the device specified by
+device function
+.Fa pf .
+.It Fn pcmcia_io_alloc "pf" "start" "size" "align" "pciop"
+Request I/O space for device function
+.Fa pf
+at address
+.Fa start
+of size
+.Fa size .
+Alignment is specified by
+.Fa align .
+A handle for the I/O space is returned in
+.Fa pciop .
+.It Fn pcmcia_io_free "pf" "pcihp"
+Release I/O space with handle
+.Fa pcihp
+for device function
+.Fa pf .
+.It Fn pcmcia_io_map "pf" "width" "pcihp" "windowp"
+Map device I/O for device function
+.Fa pf
+to the I/O space with handle
+.Fa pcihp .
+The width of data access is specified by
+.Fa width .
+Valid values for the width are:
+.Bl -tag -width PCMCIA_WIDTH_AUTO
+.It PCMCIA_WIDTH_AUTO
+Use the largest I/O width reported by the device.
+.It PCMCIA_WIDTH_IO8
+Force 8-bit I/O width.
+.It PCMCIA_WIDTH_IO16
+Force 16-bit I/O width.
+.El
+.Pp
+A handle for the mapped I/O window is returned in
+.Fa windowp .
+.It Fn pcmcia_io_unmap "pf" "window"
+Unmap the I/O window
+.Fa window
+for device function
+.Fa pf .
+.It Fn pcmcia_mem_alloc "pf" "size" "pcmhp"
+Request memory space for device function
+.Fa pf
+of size
+.Fa size .
+A handle for the memory space is returned in
+.Fa pcmhp .
+.It Fn pcmcia_mem_free "pf" "pcmhp"
+Release memory space with handle
+.Fa pcmhp
+for device function
+.Fa pf .
+.It Fn pcmcia_mem_map "pf" "width" "card_addr" "size" "pcmhp" "offsetp" \
+"windowp"
+Map device memory for device function
+.Fa pf
+to the memory space with handle
+.Fa pcmhp .
+The address of the device memory starts at
+.Fa card_addr
+and is size
+.Fa size .
+The width of data access is specified by
+.Fa width .
+Valid values for the width are:
+.Bl -tag -width PCMCIA_WIDTH_MEM16
+.It PCMCIA_WIDTH_MEM8
+Force 8-bit memory width.
+.It PCMCIA_WIDTH_MEM16
+Force 16-bit memory width.
+.El
+.Pp
+A handle for the mapped memory window is returned in
+.Fa windowp
+and a bus-space offset into the memory window is returned in
+.Fa offsetp .
+.It Fn pcmcia_mem_unmap "pf" "window"
+Unmap the memory window
+.Fa window
+for device function
+.Fa pf .
+.It Fn pcmcia_intr_establish "pf" "level" "handler" "arg"
+Establish an interrupt handler for device function
+.Fa pf .
+The priority of the interrupt is specified by
+.Fa level .
+When the interrupt occurs the function
+.Fa handler
+is called with argument
+.Fa arg .
+The return value is a handle for the interrupt handler.
+.Fn pcmcia_intr_establish
+returns an opaque handle to an event descriptor if it succeeds, and
+returns NULL on failure.
+.It Fn pcmcia_intr_disestablish "pf" "ih"
+Dis-establish the interrupt handler for device function
+.Fa pf
+with handle
+.Fa ih .
+The handle was returned from
+.Fn pcmcia_intr_establish .
+.It Fn pcmcia_cis_read_1 "tuple" "index"
+Read one byte from tuple
+.Fa tuple
+at index
+.Fa index
+in the CIS.
+.It Fn pcmcia_cis_read_2 "tuple" "index"
+Read two bytes from tuple
+.Fa tuple
+at index
+.Fa index
+in the CIS.
+.It Fn pcmcia_cis_read_3 "tuple" "index"
+Read three bytes from tuple
+.Fa tuple
+at index
+.Fa index
+in the CIS.
+.It Fn pcmcia_cis_read_4 "tuple" "index"
+Read four bytes from tuple
+.Fa tuple
+at index
+.Fa index
+in the CIS.
+.It Fn pcmcia_cis_read_n "tuple" "number" "index"
+Read
+.Fa n
+bytes from tuple
+.Fa tuple
+at index
+.Fa index
+in the CIS.
+.It Fn pcmcia_scan_cis "dev" "func" "arg"
+Scan the CIS for device
+.Fa dev .
+For each tuple in the CIS, function
+.Fa func
+is called with the tuple and the argument
+.Fa arg .
+.Fa func
+should return 0 if the tuple it was called with is the one it was
+looking for, or 1 otherwise.
+.El
+.Sh AUTOCONFIGURATION
+During autoconfiguration, a
+.Nm
+driver will receive a pointer to
+.Fa struct pcmcia_attach_args
+describing the device attached to the PCMCIA bus.
+Drivers match the device using the
+.Em manufacturer
+and
+.Em product
+members.
+.Pp
+During the driver attach step, drivers will use the pcmcia function
+.Em pf .
+The driver should traverse the list of config entries searching for a
+useful configuration.
+This config entry is passed to
+.Fn pcmcia_function_init
+to initialise the machine-independent interface.
+I/O and memory resources should be initialised using
+.Fn pcmcia_io_alloc
+and
+.Fn pcmcia_mem_alloc
+using the specified resources in the config entry.
+These resources can then be mapped into processor bus space using
+.Fn pcmcia_io_map
+and
+.Fn pcmcia_mem_map
+respectively.
+Upon successful allocation of resources, power can be applied to the
+device with
+.Fn pcmcia_function_enable
+so that device-specific interrogation can be performed.
+Finally, power should be removed from the device using
+.Fn pcmcia_function_disable .
+.Pp
+Since PCMCIA devices support dynamic configuration, drivers should
+make use of
+.Xr pmf 9
+framework.
+Power can be applied and the interrupt handler should be established
+through this interface.
+.Sh DMA SUPPORT
+PCMCIA devices do not support DMA.
+.Sh CODE REFERENCES
+The PCMCIA subsystem itself is implemented within the file
+.Pa sys/dev/pcmcia/pcmcia.c .
+The database of known devices exists within the file
+.Pa sys/dev/pcmcia/pcmciadevs_data.h
+and is generated automatically from the file
+.Pa sys/dev/pcmcia/pcmciadevs .
+New manufacturer and product identifiers should be added to this file.
+The database can be regenerated using the Makefile
+.Pa sys/dev/pcmcia/Makefile.pcmciadevs .
+.Sh SEE ALSO
+.Xr pcic 4 ,
+.Xr pcmcia 4 ,
+.Xr tcic 4 ,
+.Xr autoconf 9 ,
+.Xr bus_dma 9 ,
+.Xr bus_space 9 ,
+.Xr driver 9
+.Rs
+.%A Personal Computer Memory Card International Association (PCMCIA)
+.%T "PC Card 95 Standard"
+.%D 1995
+.Re
+.Sh HISTORY
+The machine-independent PCMCIA subsystem appeared in
+.Nx 1.3 .