Linux Kernel  3.7.1
 All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros Groups Pages
Functions
pcmcia_resource.c File Reference
#include <linux/module.h>
#include <linux/kernel.h>
#include <linux/interrupt.h>
#include <linux/delay.h>
#include <linux/pci.h>
#include <linux/device.h>
#include <linux/netdevice.h>
#include <linux/slab.h>
#include <asm/irq.h>
#include <pcmcia/ss.h>
#include <pcmcia/cistpl.h>
#include <pcmcia/cisreg.h>
#include <pcmcia/ds.h>
#include "cs_internal.h"

Go to the source code of this file.

Functions

 module_param (io_speed, int, 0444)
 
int pcmcia_validate_mem (struct pcmcia_socket *s)
 
struct resourcepcmcia_find_mem_region (u_long base, u_long num, u_long align, int low, struct pcmcia_socket *s)
 
int pcmcia_read_config_byte (struct pcmcia_device *p_dev, off_t where, u8 *val)
 
 EXPORT_SYMBOL (pcmcia_read_config_byte)
 
int pcmcia_write_config_byte (struct pcmcia_device *p_dev, off_t where, u8 val)
 
 EXPORT_SYMBOL (pcmcia_write_config_byte)
 
int pcmcia_map_mem_page (struct pcmcia_device *p_dev, struct resource *res, unsigned int offset)
 
 EXPORT_SYMBOL (pcmcia_map_mem_page)
 
int pcmcia_fixup_iowidth (struct pcmcia_device *p_dev)
 
 EXPORT_SYMBOL (pcmcia_fixup_iowidth)
 
int pcmcia_fixup_vpp (struct pcmcia_device *p_dev, unsigned char new_vpp)
 
 EXPORT_SYMBOL (pcmcia_fixup_vpp)
 
int pcmcia_release_configuration (struct pcmcia_device *p_dev)
 
int pcmcia_release_window (struct pcmcia_device *p_dev, struct resource *res)
 
 EXPORT_SYMBOL (pcmcia_release_window)
 
int pcmcia_enable_device (struct pcmcia_device *p_dev)
 
 EXPORT_SYMBOL (pcmcia_enable_device)
 
int pcmcia_request_io (struct pcmcia_device *p_dev)
 
 EXPORT_SYMBOL (pcmcia_request_io)
 
int __must_check pcmcia_request_irq (struct pcmcia_device *p_dev, irq_handler_t handler)
 
 EXPORT_SYMBOL (pcmcia_request_irq)
 
int __must_check __pcmcia_request_exclusive_irq (struct pcmcia_device *p_dev, irq_handler_t handler)
 
 EXPORT_SYMBOL (__pcmcia_request_exclusive_irq)
 
void pcmcia_cleanup_irq (struct pcmcia_socket *s)
 
int pcmcia_setup_irq (struct pcmcia_device *p_dev)
 
int pcmcia_request_window (struct pcmcia_device *p_dev, struct resource *res, unsigned int speed)
 
 EXPORT_SYMBOL (pcmcia_request_window)
 
void pcmcia_disable_device (struct pcmcia_device *p_dev)
 
 EXPORT_SYMBOL (pcmcia_disable_device)
 

Function Documentation

int __must_check __pcmcia_request_exclusive_irq ( struct pcmcia_device *  p_dev,
irq_handler_t  handler 
)

pcmcia_request_exclusive_irq() - attempt to request an exclusive IRQ first : the associated PCMCIA device : IRQ handler to register

pcmcia_request_exclusive_irq() is a wrapper around request_irq() which attempts first to request an exclusive IRQ. If it fails, it also accepts a shared IRQ, but prints out a warning. PCMCIA drivers should allow for IRQ sharing and either use request_irq directly (then they need to call free_irq() themselves, too), or the pcmcia_request_irq() function.

Definition at line 728 of file pcmcia_resource.c.

EXPORT_SYMBOL ( pcmcia_read_config_byte  )
EXPORT_SYMBOL ( pcmcia_write_config_byte  )
EXPORT_SYMBOL ( pcmcia_map_mem_page  )
EXPORT_SYMBOL ( pcmcia_fixup_iowidth  )
EXPORT_SYMBOL ( pcmcia_fixup_vpp  )
EXPORT_SYMBOL ( pcmcia_release_window  )
EXPORT_SYMBOL ( pcmcia_enable_device  )
EXPORT_SYMBOL ( pcmcia_request_io  )
EXPORT_SYMBOL ( pcmcia_request_irq  )
EXPORT_SYMBOL ( __pcmcia_request_exclusive_irq  )
EXPORT_SYMBOL ( pcmcia_request_window  )
EXPORT_SYMBOL ( pcmcia_disable_device  )
module_param ( io_speed  ,
int  ,
0444   
)
void pcmcia_cleanup_irq ( struct pcmcia_socket s)

Definition at line 820 of file pcmcia_resource.c.

void pcmcia_disable_device ( struct pcmcia_device *  p_dev)

pcmcia_disable_device() - disable and clean up a PCMCIA device : the associated PCMCIA device

pcmcia_disable_device() is the driver-callable counterpart to pcmcia_enable_device(): If a PCMCIA device is no longer used, drivers are expected to clean up and disable the device by calling this function. Any I/O ranges (iomem and ioports) will be released, the Vpp voltage will be set to 0, and IRQs will no longer be generated – at least if there is no other card function (of multifunction devices) being used.

Definition at line 981 of file pcmcia_resource.c.

int pcmcia_enable_device ( struct pcmcia_device *  p_dev)

pcmcia_enable_device() - set up and activate a PCMCIA device : the associated PCMCIA device

pcmcia_enable_device() physically enables a PCMCIA device. It parses the flags passed to in and stored in ->flags and sets up the Vpp voltage, enables the speaker line, I/O ports and store proper values to configuration registers.

Definition at line 484 of file pcmcia_resource.c.

struct resource* pcmcia_find_mem_region ( u_long  base,
u_long  num,
u_long  align,
int  low,
struct pcmcia_socket s 
)
read

Definition at line 49 of file pcmcia_resource.c.

int pcmcia_fixup_iowidth ( struct pcmcia_device *  p_dev)

pcmcia_fixup_iowidth() - reduce io width to 8bit : pcmcia device

pcmcia_fixup_iowidth() allows a PCMCIA device driver to reduce the IO width to 8bit after having called pcmcia_enable_device() previously.

Definition at line 257 of file pcmcia_resource.c.

int pcmcia_fixup_vpp ( struct pcmcia_device *  p_dev,
unsigned char  new_vpp 
)

pcmcia_fixup_vpp() - set Vpp to a new voltage level : pcmcia device : new Vpp voltage

pcmcia_fixup_vpp() allows a PCMCIA device driver to set Vpp to a new voltage level between calls to pcmcia_enable_device() and pcmcia_disable_device().

Definition at line 307 of file pcmcia_resource.c.

int pcmcia_map_mem_page ( struct pcmcia_device *  p_dev,
struct resource res,
unsigned int  offset 
)

pcmcia_map_mem_page() - modify iomem window to point to a different offset : pcmcia device : iomem resource already enabled by pcmcia_request_window() : card_offset to map

pcmcia_map_mem_page() modifies what can be read and written by accessing an iomem range previously enabled by pcmcia_request_window(), by setting the card_offset value to .

Definition at line 227 of file pcmcia_resource.c.

int pcmcia_read_config_byte ( struct pcmcia_device *  p_dev,
off_t  where,
u8 val 
)

pcmcia_read_config_byte() - read a byte from a card configuration register

pcmcia_read_config_byte() reads a byte from a configuration register in attribute memory.

Definition at line 197 of file pcmcia_resource.c.

int pcmcia_release_configuration ( struct pcmcia_device *  p_dev)

pcmcia_release_configuration() - physically disable a PCMCIA device : pcmcia device

pcmcia_release_configuration() is the 1:1 counterpart to pcmcia_enable_device(): If a PCMCIA device is no longer used by any driver, the Vpp voltage is set to 0, IRQs will no longer be generated, and I/O ranges will be disabled. As pcmcia_release_io() and pcmcia_release_window() still need to be called, device drivers are expected to call pcmcia_disable_device() instead.

Definition at line 350 of file pcmcia_resource.c.

int pcmcia_release_window ( struct pcmcia_device *  p_dev,
struct resource res 
)

pcmcia_release_window() - release reserved iomem for PCMCIA devices : pcmcia device : iomem resource to release

pcmcia_release_window() releases &struct resource *res which was previously reserved by calling pcmcia_request_window().

Definition at line 432 of file pcmcia_resource.c.

int pcmcia_request_io ( struct pcmcia_device *  p_dev)

pcmcia_request_io() - attempt to reserve port ranges for PCMCIA devices : the associated PCMCIA device

pcmcia_request_io() attempts to reserve the IO port ranges specified in &struct pcmcia_device ->resource[0] and ->resource[1]. The "start" value is the requested start of the IO port resource; "end" reflects the number of ports requested. The number of IO lines requested is specified in &struct pcmcia_device ->io_lines.

Definition at line 631 of file pcmcia_resource.c.

int __must_check pcmcia_request_irq ( struct pcmcia_device *  p_dev,
irq_handler_t  handler 
)

pcmcia_request_irq() - attempt to request a IRQ for a PCMCIA device : the associated PCMCIA device : IRQ handler to register

pcmcia_request_irq() is a wrapper around request_irq() which allows the PCMCIA core to clean up the registration in pcmcia_disable_device(). Drivers are free to use request_irq() directly, but then they need to call free_irq() themselfves, too. Also, only IRQF_SHARED capable IRQ handlers are allowed.

Definition at line 698 of file pcmcia_resource.c.

int pcmcia_request_window ( struct pcmcia_device *  p_dev,
struct resource res,
unsigned int  speed 
)

pcmcia_request_window() - attempt to reserve iomem for PCMCIA devices : the associated PCMCIA device : &struct resource pointing to p_dev->resource[2..5] : access speed

pcmcia_request_window() attepts to reserve an iomem ranges specified in &struct resource pointing to one of the entries in &struct pcmcia_device ->resource[2..5]. The "start" value is the requested start of the IO mem resource; "end" reflects the size requested.

Definition at line 878 of file pcmcia_resource.c.

int pcmcia_setup_irq ( struct pcmcia_device *  p_dev)

pcmcia_setup_irq() - determine IRQ to be used for device - the associated PCMCIA device

locking note: must be called with ops_mutex locked.

Definition at line 835 of file pcmcia_resource.c.

int pcmcia_validate_mem ( struct pcmcia_socket s)

Definition at line 41 of file pcmcia_resource.c.

int pcmcia_write_config_byte ( struct pcmcia_device *  p_dev,
off_t  where,
u8  val 
)

pcmcia_write_config_byte() - write a byte to a card configuration register

pcmcia_write_config_byte() writes a byte to a configuration register in attribute memory.

Definition at line 210 of file pcmcia_resource.c.