drivers/gpib/cb7210/cb7210.c
Source file repositories/reference/linux-study-clean/drivers/gpib/cb7210/cb7210.c
File Facts
- System
- Linux kernel
- Corpus path
drivers/gpib/cb7210/cb7210.c- Extension
.c- Size
- 47551 bytes
- Lines
- 1588
- Domain
- Driver Families
- Bucket
- drivers/gpib
- Inferred role
- Driver Families: operation-table or driver-model contract
- Status
- pattern implementation candidate
Why This File Exists
Repeatable hardware-adapter layer. Deep compatibility for every driver is out of scope; this atlas records patterns, probe lifecycles, bus glue, IRQ/DMA usage, and links back to core abstractions.
- Repeatable hardware-adapter layer. Deep compatibility for every driver is out of scope; this atlas records patterns, probe lifecycles, bus glue, IRQ/DMA usage, and links back to core abstractions.
- Defines an operation table; this is where Linux turns generic core objects into subsystem-specific behavior.
- Uses kernel synchronization; read lock ordering, sleepability, and interrupt context assumptions before translating.
- Touches IRQ or DMA behavior; this matters for the representative real-device path.
- Allocates kernel memory; connect allocation flags and lifetime to context constraints.
- Defines or uses C structs; map object ownership, embedded links, reference counts, and lock ownership.
Dependency Surface
cb7210.hlinux/ioport.hlinux/sched.hlinux/module.hlinux/slab.hasm/dma.hlinux/bitops.hlinux/pci.hlinux/pci_ids.hlinux/string.hlinux/init.hlinux/delay.hgpib_pci_ids.hquancom_pci.hlinux/kernel.hlinux/ptrace.hlinux/timer.hlinux/io.hpcmcia/cistpl.hpcmcia/ds.h
Detected Declarations
struct local_infofunction have_fifo_wordfunction input_fifo_enablefunction fifo_readfunction cb7210_accel_readfunction output_fifo_emptyfunction output_fifo_enablefunction fifo_writefunction output_fifo_emptyfunction cb7210_accel_writefunction cb7210_line_statusfunction cb7210_t1_delayfunction cb_pci_interruptfunction cb7210_internal_interruptfunction cb7210_locked_internal_interruptfunction cb7210_interruptfunction cb7210_readfunction cb7210_writefunction cb7210_commandfunction cb7210_take_controlfunction cb7210_go_to_standbyfunction cb7210_request_system_controlfunction cb7210_interface_clearfunction cb7210_remote_enablefunction cb7210_enable_eosfunction cb7210_disable_eosfunction cb7210_update_statusfunction cb7210_primary_addressfunction cb7210_secondary_addressfunction cb7210_parallel_pollfunction cb7210_parallel_poll_configurefunction cb7210_parallel_poll_responsefunction cb7210_serial_poll_responsefunction cb7210_serial_poll_statusfunction cb7210_return_to_localfunction cb7210_allocate_privatefunction cb7210_generic_detachfunction cb7210_generic_attachfunction cb7210_initfunction cb_pci_attachfunction cb_pci_detachfunction cb_isa_attachfunction cb_isa_detachfunction cb7210_pci_probefunction gpib_attachfunction cb_gpib_removefunction cb_gpib_config_iterationfunction gpib_config
Annotated Snippet
static struct pci_driver cb7210_pci_driver = {
.name = DRV_NAME,
.id_table = cb7210_pci_table,
.probe = &cb7210_pci_probe
};
/***************************************************************************
* Support for computer boards pcmcia-gpib card
*
* Based on gpib PCMCIA client driver written by Claus Schroeter
* (clausi@chemie.fu-berlin.de), which was adapted from the
* pcmcia skeleton example (presumably David Hinds)
***************************************************************************/
#ifdef CONFIG_GPIB_PCMCIA
#include <linux/kernel.h>
#include <linux/ptrace.h>
#include <linux/timer.h>
#include <linux/io.h>
#include <pcmcia/cistpl.h>
#include <pcmcia/ds.h>
/*
* The event() function is this driver's Card Services event handler.
* It will be called by Card Services when an appropriate card status
* event is received. The config() and release() entry points are
* used to configure or release a socket, in response to card insertion
* and ejection events. They are invoked from the gpib event
* handler.
*/
static int cb_gpib_config(struct pcmcia_device *link);
static void cb_gpib_release(struct pcmcia_device *link);
static int cb_pcmcia_attach(struct gpib_board *board, const struct gpib_board_config *config);
static void cb_pcmcia_detach(struct gpib_board *board);
/*
* A linked list of "instances" of the gpib device. Each actual
* PCMCIA card corresponds to one device instance, and is described
* by one dev_link_t structure (defined in ds.h).
*
* You may not want to use a linked list for this -- for example, the
* memory card driver uses an array of dev_link_t pointers, where minor
* device numbers are used to derive the corresponding array index.
*/
static struct pcmcia_device *curr_dev;
/*
* A dev_link_t structure has fields for most things that are needed
* to keep track of a socket, but there will usually be some device
* specific information that also needs to be kept track of. The
* 'priv' pointer in a dev_link_t structure can be used to point to
* a device-specific private data structure, like this.
*
* A driver needs to provide a dev_node_t structure for each device
* on a card. In some cases, there is only one device per card (for
* example, ethernet cards, modems). In other cases, there may be
* many actual or logical devices (SCSI adapters, memory cards with
* multiple partitions). The dev_node_t structures need to be kept
* in a linked list starting at the 'dev' field of a dev_link_t
* structure. We allocate them in the card's private data structure,
* because they generally can't be allocated dynamically.
*/
struct local_info {
struct pcmcia_device *p_dev;
struct gpib_board *dev;
};
/*
* gpib_attach() creates an "instance" of the driver, allocating
* local data structures for one device. The device is registered
* with Card Services.
*
* The dev_link structure is initialized, but we don't actually
* configure the card at this point -- we wait until we receive a
* card insertion event.
*/
static int cb_gpib_probe(struct pcmcia_device *link)
{
struct local_info *info;
int ret;
/* Allocate space for private device-specific data */
info = kzalloc_obj(*info);
if (!info)
Annotation
- Immediate include surface: `cb7210.h`, `linux/ioport.h`, `linux/sched.h`, `linux/module.h`, `linux/slab.h`, `asm/dma.h`, `linux/bitops.h`, `linux/pci.h`.
- Detected declarations: `struct local_info`, `function have_fifo_word`, `function input_fifo_enable`, `function fifo_read`, `function cb7210_accel_read`, `function output_fifo_empty`, `function output_fifo_enable`, `function fifo_write`, `function output_fifo_empty`, `function cb7210_accel_write`.
- Atlas domain: Driver Families / drivers/gpib.
- Implementation status: pattern implementation candidate.
- Synchronization appears in or near this file; preserve lock ordering, sleepability, and interrupt-context constraints.
- IRQ or DMA behavior appears here, which is relevant to the selected PCIe/NVMe device path.
Implementation Notes
- This generated page is the file-by-file coverage layer; curated subsystem chapters should link here when they synthesize a multi-file control flow.
- Core OS pages should be promoted from atlas-only to deep-reviewed when they explain data structures, invariants, locking, lifecycle, and C implementation snippets.
- Driver-family pages are intentionally pattern-oriented unless they are part of the selected PCIe/NVMe representative device path.