patch-2.4.19 linux-2.4.19/drivers/ieee1394/ohci1394.h
Next file: linux-2.4.19/drivers/ieee1394/pcilynx.c
Previous file: linux-2.4.19/drivers/ieee1394/ohci1394.c
Back to the patch index
Back to the overall index
- Lines: 198
- Date:
Fri Aug 2 17:39:44 2002
- Orig file:
linux-2.4.18/drivers/ieee1394/ohci1394.h
- Orig date:
Mon Oct 1 21:24:24 2001
diff -urN linux-2.4.18/drivers/ieee1394/ohci1394.h linux-2.4.19/drivers/ieee1394/ohci1394.h
@@ -21,7 +21,10 @@
#ifndef _OHCI1394_H
#define _OHCI1394_H
+#include <asm/io.h>
+
#include "ieee1394_types.h"
+#include <asm/io.h>
#define OHCI1394_DRIVER_NAME "ohci1394"
@@ -76,9 +79,13 @@
quadlet_t pad[4]; /* FIXME: quick hack for memory alignment */
};
+/* identify whether a DMA context is asynchronous or isochronous */
+enum context_type { DMA_CTX_ASYNC_REQ, DMA_CTX_ASYNC_RESP, DMA_CTX_ISO };
+
/* DMA receive context */
struct dma_rcv_ctx {
- void *ohci;
+ struct ti_ohci *ohci;
+ enum context_type type;
int ctx;
unsigned int num_desc;
@@ -105,7 +112,8 @@
/* DMA transmit context */
struct dma_trm_ctx {
- void *ohci;
+ struct ti_ohci *ohci;
+ enum context_type type;
int ctx;
unsigned int num_desc;
@@ -133,21 +141,21 @@
int cmdPtr;
};
-/* video device template */
-struct video_template {
- void (*irq_handler) (int card, quadlet_t isoRecvEvent,
- quadlet_t isoXmitEvent);
-};
-
-
struct ti_ohci {
int id; /* sequential card number */
- struct list_head list;
-
struct pci_dev *dev;
- u32 state;
+ enum {
+ OHCI_INIT_ALLOC_HOST,
+ OHCI_INIT_HAVE_MEM_REGION,
+ OHCI_INIT_HAVE_IOMAPPING,
+ OHCI_INIT_HAVE_CONFIG_ROM_BUFFER,
+ OHCI_INIT_HAVE_SELFID_BUFFER,
+ OHCI_INIT_HAVE_TXRX_BUFFERS__MAYBE,
+ OHCI_INIT_HAVE_IRQ,
+ OHCI_INIT_DONE,
+ } init_state;
/* remapped memory spaces */
void *registers;
@@ -175,11 +183,13 @@
struct dma_rcv_ctx *ir_context;
spinlock_t IR_channel_lock;
int nb_iso_rcv_ctx;
-
+ unsigned long ir_ctx_usage; /* use test_and_set_bit() for atomicity */
+
/* iso transmit */
struct dma_trm_ctx *it_context;
int nb_iso_xmit_ctx;
-
+ unsigned long it_ctx_usage; /* use test_and_set_bit() for atomicity */
+
u64 ISO_channel_usage;
/* IEEE-1394 part follows */
@@ -192,8 +202,15 @@
int self_id_errors;
- /* video device */
- struct video_template *video_tmpl;
+ /* IRQ hooks, for video1394 and dv1394 */
+
+#define OHCI1394_MAX_IRQ_HOOKS 16
+
+ struct ohci1394_irq_hook {
+ void (*irq_handler) (int card, quadlet_t isoRecvEvent,
+ quadlet_t isoXmitEvent, void *data);
+ void *data;
+ } irq_hooks[OHCI1394_MAX_IRQ_HOOKS];
/* Swap the selfid buffer? */
unsigned int selfid_swap:1;
@@ -230,6 +247,12 @@
/* 2 KiloBytes of register space */
#define OHCI1394_REGISTER_SIZE 0x800
+/* Offsets relative to context bases defined below */
+
+#define OHCI1394_ContextControlSet 0x000
+#define OHCI1394_ContextControlClear 0x004
+#define OHCI1394_ContextCommandPtr 0x00C
+
/* register map */
#define OHCI1394_Version 0x000
#define OHCI1394_GUID_ROM 0x004
@@ -281,27 +304,37 @@
#define OHCI1394_PhyReqFilterLoSet 0x118
#define OHCI1394_PhyReqFilterLoClear 0x11C
#define OHCI1394_PhyUpperBound 0x120
+
+#define OHCI1394_AsReqTrContextBase 0x180
#define OHCI1394_AsReqTrContextControlSet 0x180
#define OHCI1394_AsReqTrContextControlClear 0x184
#define OHCI1394_AsReqTrCommandPtr 0x18C
+
+#define OHCI1394_AsRspTrContextBase 0x1A0
#define OHCI1394_AsRspTrContextControlSet 0x1A0
#define OHCI1394_AsRspTrContextControlClear 0x1A4
#define OHCI1394_AsRspTrCommandPtr 0x1AC
+
+#define OHCI1394_AsReqRcvContextBase 0x1C0
#define OHCI1394_AsReqRcvContextControlSet 0x1C0
#define OHCI1394_AsReqRcvContextControlClear 0x1C4
#define OHCI1394_AsReqRcvCommandPtr 0x1CC
+
+#define OHCI1394_AsRspRcvContextBase 0x1E0
#define OHCI1394_AsRspRcvContextControlSet 0x1E0
#define OHCI1394_AsRspRcvContextControlClear 0x1E4
#define OHCI1394_AsRspRcvCommandPtr 0x1EC
/* Isochronous transmit registers */
-/* Add (32 * n) for context n */
+/* Add (16 * n) for context n */
+#define OHCI1394_IsoXmitContextBase 0x200
#define OHCI1394_IsoXmitContextControlSet 0x200
#define OHCI1394_IsoXmitContextControlClear 0x204
#define OHCI1394_IsoXmitCommandPtr 0x20C
/* Isochronous receive registers */
/* Add (32 * n) for context n */
+#define OHCI1394_IsoRcvContextBase 0x400
#define OHCI1394_IsoRcvContextControlSet 0x400
#define OHCI1394_IsoRcvContextControlClear 0x404
#define OHCI1394_IsoRcvCommandPtr 0x40C
@@ -342,14 +375,39 @@
#define DMA_CTL_BRANCH 0x000c0000
#define DMA_CTL_WAIT 0x00030000
+/* OHCI evt_* error types, table 3-2 of the OHCI 1.1 spec. */
+#define EVT_NO_STATUS 0x0 /* No event status */
+#define EVT_RESERVED 0x1 /* Reserved, not used !!! */
+#define EVT_LONG_PACKET 0x2 /* The revc data was longer than the buf */
+#define EVT_MISSING_ACK 0x3 /* A subaction gap was detected before an ack
+ arrived, or recv'd ack had a parity error */
+#define EVT_UNDERRUN 0x4 /* Underrun on corresponding FIFO, packet
+ truncated */
+#define EVT_OVERRUN 0x5 /* A recv FIFO overflowed on reception of ISO
+ packet */
+#define EVT_DESCRIPTOR_READ 0x6 /* An unrecoverable error occured while host was
+ reading a descriptor block */
+#define EVT_DATA_READ 0x7 /* An error occured while host controller was
+ attempting to read from host memory in the data
+ stage of descriptor processing */
+#define EVT_DATA_WRITE 0x8 /* An error occured while host controller was
+ attempting to write either during the data stage
+ of descriptor processing, or when processing a single
+ 16-bit host memory write */
+#define EVT_BUS_RESET 0x9 /* Identifies a PHY packet in the recv buffer as
+ being a synthesized bus reset packet */
+
#define OHCI1394_TCODE_PHY 0xE
void ohci1394_stop_context(struct ti_ohci *ohci, int reg, char *msg);
struct ti_ohci *ohci1394_get_struct(int card_num);
-int ohci1394_register_video(struct ti_ohci *ohci,
- struct video_template *tmpl);
-void ohci1394_unregister_video(struct ti_ohci *ohci,
- struct video_template *tmpl);
+int ohci1394_hook_irq(struct ti_ohci *ohci,
+ void (*irq_handler) (int, quadlet_t, quadlet_t, void *),
+ void *data);
+
+void ohci1394_unhook_irq(struct ti_ohci *ohci,
+ void (*irq_handler) (int, quadlet_t, quadlet_t, void *),
+ void *data);
#endif
FUNET's LINUX-ADM group, linux-adm@nic.funet.fi
TCL-scripts by Sam Shen (who was at: slshen@lbl.gov)