amdtp.c
上传用户:jlfgdled
上传日期:2013-04-10
资源大小:33168k
文件大小:33k
源码类别:

Linux/Unix编程

开发平台:

Unix_Linux

  1. /* -*- c-basic-offset: 8 -*-
  2.  *
  3.  * amdtp.c - Audio and Music Data Transmission Protocol Driver
  4.  * Copyright (C) 2001 Kristian H鴊sberg
  5.  *
  6.  * This program is free software; you can redistribute it and/or modify
  7.  * it under the terms of the GNU General Public License as published by
  8.  * the Free Software Foundation; either version 2 of the License, or
  9.  * (at your option) any later version.
  10.  *
  11.  * This program is distributed in the hope that it will be useful,
  12.  * but WITHOUT ANY WARRANTY; without even the implied warranty of
  13.  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  14.  * GNU General Public License for more details.
  15.  *
  16.  * You should have received a copy of the GNU General Public License
  17.  * along with this program; if not, write to the Free Software Foundation,
  18.  * Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
  19.  */
  20. /* OVERVIEW
  21.  * --------
  22.  *
  23.  * The AMDTP driver is designed to expose the IEEE1394 bus as a
  24.  * regular OSS soundcard, i.e. you can link /dev/dsp to /dev/amdtp and
  25.  * then your favourite MP3 player, game or whatever sound program will
  26.  * output to an IEEE1394 isochronous channel.  The signal destination
  27.  * could be a set of IEEE1394 loudspeakers (if and when such things
  28.  * become available) or an amplifier with IEEE1394 input (like the
  29.  * Sony STR-LSA1).  The driver only handles the actual streaming, some
  30.  * connection management is also required for this to actually work.
  31.  * That is outside the scope of this driver, and furthermore it is not
  32.  * really standardized yet.
  33.  *
  34.  * The Audio and Music Data Tranmission Protocol is available at
  35.  *
  36.  *     http://www.1394ta.org/Download/Technology/Specifications/2001/AM20Final-jf2.pdf
  37.  *
  38.  *
  39.  * TODO
  40.  * ----
  41.  *
  42.  * - We should be able to change input sample format between LE/BE, as
  43.  *   we already shift the bytes around when we construct the iso
  44.  *   packets.
  45.  *
  46.  * - Fix DMA stop after bus reset!
  47.  *
  48.  * - Clean up iso context handling in ohci1394.
  49.  *
  50.  *
  51.  * MAYBE TODO
  52.  * ----------
  53.  *
  54.  * - Receive data for local playback or recording.  Playback requires
  55.  *   soft syncing with the sound card.
  56.  *
  57.  * - Signal processing, i.e. receive packets, do some processing, and
  58.  *   transmit them again using the same packet structure and timestamps
  59.  *   offset by processing time.
  60.  *
  61.  * - Maybe make an ALSA interface, that is, create a file_ops
  62.  *   implementation that recognizes ALSA ioctls and uses defaults for
  63.  *   things that can't be controlled through ALSA (iso channel).
  64.  */
  65. #include <linux/module.h>
  66. #include <linux/list.h>
  67. #include <linux/sched.h>
  68. #include <linux/types.h>
  69. #include <linux/fs.h>
  70. #include <linux/ioctl.h>
  71. #include <linux/wait.h>
  72. #include <linux/pci.h>
  73. #include <linux/interrupt.h>
  74. #include <linux/poll.h>
  75. #include <asm/uaccess.h>
  76. #include <asm/atomic.h>
  77. #include "hosts.h"
  78. #include "highlevel.h"
  79. #include "ieee1394.h"
  80. #include "ieee1394_core.h"
  81. #include "ohci1394.h"
  82. #include "amdtp.h"
  83. #include "cmp.h"
  84. #define FMT_AMDTP 0x10
  85. #define FDF_AM824 0x00
  86. #define FDF_SFC_32KHZ   0x00
  87. #define FDF_SFC_44K1HZ  0x01
  88. #define FDF_SFC_48KHZ   0x02
  89. #define FDF_SFC_88K2HZ  0x03
  90. #define FDF_SFC_96KHZ   0x04
  91. #define FDF_SFC_176K4HZ 0x05
  92. #define FDF_SFC_192KHZ  0x06
  93. struct descriptor_block {
  94. struct output_more_immediate {
  95. u32 control;
  96. u32 pad0;
  97. u32 skip;
  98. u32 pad1;
  99. u32 header[4];
  100. } header_desc;
  101. struct output_last {
  102. u32 control;
  103. u32 data_address;
  104. u32 branch;
  105. u32 status;
  106. } payload_desc;
  107. };
  108. struct packet {
  109. struct descriptor_block *db;
  110. dma_addr_t db_bus;
  111. struct iso_packet *payload;
  112. dma_addr_t payload_bus;
  113. };
  114. #include <asm/byteorder.h>
  115. #if defined __BIG_ENDIAN_BITFIELD
  116. struct iso_packet {
  117. /* First quadlet */
  118. unsigned int dbs      : 8;
  119. unsigned int eoh0     : 2;
  120. unsigned int sid      : 6;
  121. unsigned int dbc      : 8;
  122. unsigned int fn       : 2;
  123. unsigned int qpc      : 3;
  124. unsigned int sph      : 1;
  125. unsigned int reserved : 2;
  126. /* Second quadlet */
  127. unsigned int fdf      : 8;
  128. unsigned int eoh1     : 2;
  129. unsigned int fmt      : 6;
  130. unsigned int syt      : 16;
  131.         quadlet_t data[0];
  132. };
  133. #elif defined __LITTLE_ENDIAN_BITFIELD
  134. struct iso_packet {
  135. /* First quadlet */
  136. unsigned int sid      : 6;
  137. unsigned int eoh0     : 2;
  138. unsigned int dbs      : 8;
  139. unsigned int reserved : 2;
  140. unsigned int sph      : 1;
  141. unsigned int qpc      : 3;
  142. unsigned int fn       : 2;
  143. unsigned int dbc      : 8;
  144. /* Second quadlet */
  145. unsigned int fmt      : 6;
  146. unsigned int eoh1     : 2;
  147. unsigned int fdf      : 8;
  148. unsigned int syt      : 16;
  149. quadlet_t data[0];
  150. };
  151. #else
  152. #error Unknown bitfield type
  153. #endif
  154. struct fraction {
  155. int integer;
  156. int numerator;
  157. int denominator;
  158. };
  159. #define PACKET_LIST_SIZE 256
  160. #define MAX_PACKET_LISTS 4
  161. struct packet_list {
  162. struct list_head link;
  163. int last_cycle_count;
  164. struct packet packets[PACKET_LIST_SIZE];
  165. };
  166. #define BUFFER_SIZE 128
  167. /* This implements a circular buffer for incoming samples. */
  168. struct buffer {
  169. size_t head, tail, length, size;
  170. unsigned char data[0];
  171. };
  172. struct stream {
  173. int iso_channel;
  174. int format;
  175. int rate;
  176. int dimension;
  177. int fdf;
  178. int mode;
  179. int sample_format;
  180. struct cmp_pcr *opcr;
  181. /* Input samples are copied here. */
  182. struct buffer *input;
  183. /* ISO Packer state */
  184. unsigned char dbc;
  185. struct packet_list *current_packet_list;
  186. int current_packet;
  187. struct fraction ready_samples, samples_per_cycle;
  188. /* We use these to generate control bits when we are packing
  189.  * iec958 data.
  190.  */
  191. int iec958_frame_count;
  192. int iec958_rate_code;
  193. /* The cycle_count and cycle_offset fields are used for the
  194.  * synchronization timestamps (syt) in the cip header.  They
  195.  * are incremented by at least a cycle every time we put a
  196.  * time stamp in a packet.  As we dont time stamp all
  197.  * packages, cycle_count isn't updated in every cycle, and
  198.  * sometimes it's incremented by 2.  Thus, we have
  199.  * cycle_count2, which is simply incremented by one with each
  200.  * packet, so we can compare it to the transmission time
  201.  * written back in the dma programs.
  202.  */
  203. atomic_t cycle_count, cycle_count2;
  204. struct fraction cycle_offset, ticks_per_syt_offset;
  205. int syt_interval;
  206. int stale_count;
  207. /* Theses fields control the sample output to the DMA engine.
  208.  * The dma_packet_lists list holds packet lists currently
  209.  * queued for dma; the head of the list is currently being
  210.  * processed.  The last program in a packet list generates an
  211.  * interrupt, which removes the head from dma_packet_lists and
  212.  * puts it back on the free list.
  213.  */
  214. struct list_head dma_packet_lists;
  215. struct list_head free_packet_lists;
  216.         wait_queue_head_t packet_list_wait;
  217. spinlock_t packet_list_lock;
  218. struct ohci1394_iso_tasklet iso_tasklet;
  219. struct pci_pool *descriptor_pool, *packet_pool;
  220. /* Streams at a host controller are chained through this field. */
  221. struct list_head link;
  222. struct amdtp_host *host;
  223. };
  224. struct amdtp_host {
  225. struct hpsb_host *host;
  226. struct ti_ohci *ohci;
  227. struct list_head stream_list;
  228. spinlock_t stream_list_lock;
  229. struct list_head link;
  230. };
  231. static struct hpsb_highlevel *amdtp_highlevel;
  232. static LIST_HEAD(host_list);
  233. static spinlock_t host_list_lock = SPIN_LOCK_UNLOCKED;
  234. /* FIXME: This doesn't belong here... */
  235. #define OHCI1394_CONTEXT_CYCLE_MATCH 0x80000000
  236. #define OHCI1394_CONTEXT_RUN         0x00008000
  237. #define OHCI1394_CONTEXT_WAKE        0x00001000
  238. #define OHCI1394_CONTEXT_DEAD        0x00000800
  239. #define OHCI1394_CONTEXT_ACTIVE      0x00000400
  240. void ohci1394_start_it_ctx(struct ti_ohci *ohci, int ctx,
  241.    dma_addr_t first_cmd, int z, int cycle_match)
  242. {
  243. reg_write(ohci, OHCI1394_IsoXmitIntMaskSet, 1 << ctx);
  244. reg_write(ohci, OHCI1394_IsoXmitCommandPtr + ctx * 16, first_cmd | z);
  245. reg_write(ohci, OHCI1394_IsoXmitContextControlClear + ctx * 16, ~0);
  246. wmb();
  247. reg_write(ohci, OHCI1394_IsoXmitContextControlSet + ctx * 16,
  248.   OHCI1394_CONTEXT_CYCLE_MATCH | (cycle_match << 16) |
  249.   OHCI1394_CONTEXT_RUN);
  250. }
  251. void ohci1394_wake_it_ctx(struct ti_ohci *ohci, int ctx)
  252. {
  253. reg_write(ohci, OHCI1394_IsoXmitContextControlSet + ctx * 16,
  254.   OHCI1394_CONTEXT_WAKE);
  255. }
  256. void ohci1394_stop_it_ctx(struct ti_ohci *ohci, int ctx, int synchronous)
  257. {
  258. u32 control;
  259. int wait;
  260. reg_write(ohci, OHCI1394_IsoXmitIntMaskClear, 1 << ctx);
  261. reg_write(ohci, OHCI1394_IsoXmitContextControlClear + ctx * 16,
  262.   OHCI1394_CONTEXT_RUN);
  263. wmb();
  264. if (synchronous) {
  265. for (wait = 0; wait < 5; wait++) {
  266. control = reg_read(ohci, OHCI1394_IsoXmitContextControlSet + ctx * 16);
  267. if ((control & OHCI1394_CONTEXT_ACTIVE) == 0)
  268. break;
  269. set_current_state(TASK_INTERRUPTIBLE);
  270. schedule_timeout(1);
  271. }
  272. }
  273. }
  274. /* Note: we can test if free_packet_lists is empty without aquiring
  275.  * the packet_list_lock.  The interrupt handler only adds to the free
  276.  * list, there is no race condition between testing the list non-empty
  277.  * and acquiring the lock.
  278.  */
  279. static struct packet_list *stream_get_free_packet_list(struct stream *s)
  280. {
  281. struct packet_list *pl;
  282. unsigned long flags;
  283. if (list_empty(&s->free_packet_lists))
  284. return NULL;
  285. spin_lock_irqsave(&s->packet_list_lock, flags);
  286. pl = list_entry(s->free_packet_lists.next, struct packet_list, link);
  287. list_del(&pl->link);
  288. spin_unlock_irqrestore(&s->packet_list_lock, flags);
  289. return pl;
  290. }
  291. static void stream_start_dma(struct stream *s, struct packet_list *pl)
  292. {
  293. u32 syt_cycle, cycle_count, start_cycle;
  294. cycle_count = reg_read(s->host->host->hostdata,
  295.        OHCI1394_IsochronousCycleTimer) >> 12;
  296. syt_cycle = (pl->last_cycle_count - PACKET_LIST_SIZE + 1) & 0x0f;
  297. /* We program the DMA controller to start transmission at
  298.  * least 17 cycles from now - this happens when the lower four
  299.  * bits of cycle_count is 0x0f and syt_cycle is 0, in this
  300.  * case the start cycle is cycle_count - 15 + 32. */
  301. start_cycle = (cycle_count & ~0x0f) + 32 + syt_cycle;
  302. if ((start_cycle & 0x1fff) >= 8000)
  303. start_cycle = start_cycle - 8000 + 0x2000;
  304. ohci1394_start_it_ctx(s->host->ohci, s->iso_tasklet.context,
  305.       pl->packets[0].db_bus, 3,
  306.       start_cycle & 0x7fff);
  307. }
  308. static void stream_put_dma_packet_list(struct stream *s,
  309.        struct packet_list *pl)
  310. {
  311. unsigned long flags;
  312. struct packet_list *prev;
  313. /* Remember the cycle_count used for timestamping the last packet. */
  314. pl->last_cycle_count = atomic_read(&s->cycle_count2) - 1;
  315. pl->packets[PACKET_LIST_SIZE - 1].db->payload_desc.branch = 0;
  316. spin_lock_irqsave(&s->packet_list_lock, flags);
  317. list_add_tail(&pl->link, &s->dma_packet_lists);
  318. spin_unlock_irqrestore(&s->packet_list_lock, flags);
  319. prev = list_entry(pl->link.prev, struct packet_list, link);
  320. if (pl->link.prev != &s->dma_packet_lists) {
  321. struct packet *last = &prev->packets[PACKET_LIST_SIZE - 1];
  322. last->db->payload_desc.branch = pl->packets[0].db_bus | 3;
  323. last->db->header_desc.skip = pl->packets[0].db_bus | 3;
  324. ohci1394_wake_it_ctx(s->host->ohci, s->iso_tasklet.context);
  325. }
  326. else
  327. stream_start_dma(s, pl);
  328. }
  329. static void stream_shift_packet_lists(unsigned long l)
  330. {
  331. struct stream *s = (struct stream *) l;
  332. struct packet_list *pl;
  333. struct packet *last;
  334. int diff;
  335. if (list_empty(&s->dma_packet_lists)) {
  336. HPSB_ERR("empty dma_packet_lists in %s", __FUNCTION__);
  337. return;
  338. }
  339. /* Now that we know the list is non-empty, we can get the head
  340.  * of the list without locking, because the process context
  341.  * only adds to the tail.  
  342.  */
  343. pl = list_entry(s->dma_packet_lists.next, struct packet_list, link);
  344. last = &pl->packets[PACKET_LIST_SIZE - 1];
  345. /* This is weird... if we stop dma processing in the middle of
  346.  * a packet list, the dma context immediately generates an
  347.  * interrupt if we enable it again later.  This only happens
  348.  * when amdtp_release is interrupted while waiting for dma to
  349.  * complete, though.  Anyway, we detect this by seeing that
  350.  * the status of the dma descriptor that we expected an
  351.  * interrupt from is still 0.
  352.  */
  353. if (last->db->payload_desc.status == 0) {
  354. HPSB_INFO("weird interrupt...");
  355. return;
  356. }
  357. /* If the last descriptor block does not specify a branch
  358.  * address, we have a sample underflow.
  359.  */
  360. if (last->db->payload_desc.branch == 0)
  361. HPSB_INFO("FIXME: sample underflow...");
  362. /* Here we check when (which cycle) the last packet was sent
  363.  * and compare it to what the iso packer was using at the
  364.  * time.  If there is a mismatch, we adjust the cycle count in
  365.  * the iso packer.  However, there are still up to
  366.  * MAX_PACKET_LISTS packet lists queued with bad time stamps,
  367.  * so we disable time stamp monitoring for the next
  368.  * MAX_PACKET_LISTS packet lists.
  369.  */
  370. diff = (last->db->payload_desc.status - pl->last_cycle_count) & 0xf;
  371. if (diff > 0 && s->stale_count == 0) {
  372. atomic_add(diff, &s->cycle_count);
  373. atomic_add(diff, &s->cycle_count2);
  374. s->stale_count = MAX_PACKET_LISTS;
  375. }
  376. if (s->stale_count > 0)
  377. s->stale_count--;
  378. /* Finally, we move the packet list that was just processed
  379.  * back to the free list, and notify any waiters.
  380.  */
  381. spin_lock(&s->packet_list_lock);
  382. list_del(&pl->link);
  383. list_add_tail(&pl->link, &s->free_packet_lists);
  384. spin_unlock(&s->packet_list_lock);
  385. wake_up_interruptible(&s->packet_list_wait);
  386. }
  387. static struct packet *stream_current_packet(struct stream *s)
  388. {
  389. if (s->current_packet_list == NULL &&
  390.     (s->current_packet_list = stream_get_free_packet_list(s)) == NULL)
  391. return NULL;
  392. return &s->current_packet_list->packets[s->current_packet];
  393. }
  394. static void stream_queue_packet(struct stream *s)
  395. {
  396. s->current_packet++;
  397. if (s->current_packet == PACKET_LIST_SIZE) {
  398. stream_put_dma_packet_list(s, s->current_packet_list);
  399. s->current_packet_list = NULL;
  400. s->current_packet = 0;
  401. }
  402. }
  403. /* Integer fractional math.  When we transmit a 44k1Hz signal we must
  404.  * send 5 41/80 samples per isochronous cycle, as these occur 8000
  405.  * times a second.  Of course, we must send an integral number of
  406.  * samples in a packet, so we use the integer math to alternate
  407.  * between sending 5 and 6 samples per packet.
  408.  */
  409. static void fraction_init(struct fraction *f, int numerator, int denominator)
  410. {
  411. f->integer = numerator / denominator;
  412. f->numerator = numerator % denominator;
  413. f->denominator = denominator;
  414. }
  415. static __inline__ void fraction_add(struct fraction *dst,
  416.     struct fraction *src1,
  417.     struct fraction *src2)
  418. {
  419. /* assert: src1->denominator == src2->denominator */
  420. int sum, denom;
  421. /* We use these two local variables to allow gcc to optimize
  422.  * the division and the modulo into only one division. */
  423. sum = src1->numerator + src2->numerator;
  424. denom = src1->denominator;
  425. dst->integer = src1->integer + src2->integer + sum / denom;
  426. dst->numerator = sum % denom;
  427. dst->denominator = denom;
  428. }
  429. static __inline__ void fraction_sub_int(struct fraction *dst,
  430. struct fraction *src, int integer)
  431. {
  432. dst->integer = src->integer - integer;
  433. dst->numerator = src->numerator;
  434. dst->denominator = src->denominator;
  435. }
  436. static __inline__ int fraction_floor(struct fraction *frac)
  437. {
  438. return frac->integer;
  439. }
  440. static __inline__ int fraction_ceil(struct fraction *frac)
  441. {
  442. return frac->integer + (frac->numerator > 0 ? 1 : 0);
  443. }
  444. void packet_initialize(struct packet *p, struct packet *next)
  445. {
  446. /* Here we initialize the dma descriptor block for
  447.  * transferring one iso packet.  We use two descriptors per
  448.  * packet: an OUTPUT_MORE_IMMMEDIATE descriptor for the
  449.  * IEEE1394 iso packet header and an OUTPUT_LAST descriptor
  450.  * for the payload.
  451.  */
  452. p->db->header_desc.control =
  453. DMA_CTL_OUTPUT_MORE | DMA_CTL_IMMEDIATE | 8;
  454. if (next) {
  455. p->db->payload_desc.control = 
  456. DMA_CTL_OUTPUT_LAST | DMA_CTL_BRANCH;
  457. p->db->payload_desc.branch = next->db_bus | 3;
  458. p->db->header_desc.skip = next->db_bus | 3;
  459. }
  460. else {
  461. p->db->payload_desc.control = 
  462. DMA_CTL_OUTPUT_LAST | DMA_CTL_BRANCH |
  463. DMA_CTL_UPDATE | DMA_CTL_IRQ;
  464. p->db->payload_desc.branch = 0;
  465. p->db->header_desc.skip = 0;
  466. }
  467. p->db->payload_desc.data_address = p->payload_bus;
  468. p->db->payload_desc.status = 0;
  469. }
  470. struct packet_list *packet_list_alloc(struct stream *s)
  471. {
  472. int i;
  473. struct packet_list *pl;
  474. struct packet *next;
  475. pl = kmalloc(sizeof *pl, SLAB_KERNEL);
  476. if (pl == NULL)
  477. return NULL;
  478. for (i = 0; i < PACKET_LIST_SIZE; i++) {
  479. struct packet *p = &pl->packets[i];
  480. p->db = pci_pool_alloc(s->descriptor_pool, SLAB_KERNEL,
  481.        &p->db_bus);
  482. p->payload = pci_pool_alloc(s->packet_pool, SLAB_KERNEL,
  483.     &p->payload_bus);
  484. }
  485. for (i = 0; i < PACKET_LIST_SIZE; i++) {
  486. if (i < PACKET_LIST_SIZE - 1)
  487. next = &pl->packets[i + 1];
  488. else 
  489. next = NULL;
  490. packet_initialize(&pl->packets[i], next);
  491. }
  492. return pl;
  493. }
  494. void packet_list_free(struct packet_list *pl, struct stream *s)
  495. {
  496. int i;
  497. for (i = 0; i < PACKET_LIST_SIZE; i++) {
  498. struct packet *p = &pl->packets[i];
  499. pci_pool_free(s->descriptor_pool, p->db, p->db_bus);
  500. pci_pool_free(s->packet_pool, p->payload, p->payload_bus);
  501. }
  502. kfree(pl);
  503. }
  504. static struct buffer *buffer_alloc(int size)
  505. {
  506. struct buffer *b;
  507. b = kmalloc(sizeof *b + size, SLAB_KERNEL);
  508. b->head = 0;
  509. b->tail = 0;
  510. b->length = 0;
  511. b->size = size;
  512. return b;
  513. }
  514. static unsigned char *buffer_get_bytes(struct buffer *buffer, int size)
  515. {
  516. unsigned char *p;
  517. if (buffer->head + size > buffer->size)
  518. BUG();
  519. p = &buffer->data[buffer->head];
  520. buffer->head += size;
  521. if (buffer->head == buffer->size)
  522. buffer->head = 0;
  523. buffer->length -= size;
  524. return p;
  525. }
  526. static unsigned char *buffer_put_bytes(struct buffer *buffer,
  527.        size_t max, size_t *actual)
  528. {
  529. size_t length;
  530. unsigned char *p;
  531. p = &buffer->data[buffer->tail];
  532. length = min(buffer->size - buffer->length, max);
  533. if (buffer->tail + length < buffer->size) {
  534. *actual = length;
  535. buffer->tail += length;
  536. }
  537. else {
  538. *actual = buffer->size - buffer->tail;
  539.  buffer->tail = 0;
  540. }
  541. buffer->length += *actual;
  542. return p;
  543. }
  544. static u32 get_iec958_header_bits(struct stream *s, int sub_frame, u32 sample)
  545. {
  546. int csi, parity, shift;
  547. int block_start;
  548. u32 bits;
  549. switch (s->iec958_frame_count) {
  550. case 1:
  551. csi = s->format == AMDTP_FORMAT_IEC958_AC3;
  552. break;
  553. case 2:
  554. case 9:
  555. csi = 1;
  556. break;
  557. case 24 ... 27:
  558. csi = (s->iec958_rate_code >> (27 - s->iec958_frame_count)) & 0x01;
  559. break;
  560. default:
  561. csi = 0;
  562. break;
  563. }
  564. block_start = (s->iec958_frame_count == 0 && sub_frame == 0);
  565. /* The parity bit is the xor of the sample bits and the
  566.  * channel status info bit. */
  567. for (shift = 16, parity = sample ^ csi; shift > 0; shift >>= 1)
  568. parity ^= (parity >> shift);
  569. bits =  (block_start << 5) | /* Block start bit */
  570. ((sub_frame == 0) << 4) | /* Subframe bit */
  571. ((parity & 1) << 3) | /* Parity bit */
  572. (csi << 2); /* Channel status info bit */
  573. return bits;
  574. }
  575. static u32 get_header_bits(struct stream *s, int sub_frame, u32 sample)
  576. {
  577. switch (s->format) {
  578. case AMDTP_FORMAT_IEC958_PCM:
  579. case AMDTP_FORMAT_IEC958_AC3:
  580. return get_iec958_header_bits(s, sub_frame, sample);
  581. case AMDTP_FORMAT_RAW:
  582. return 0x40000000;
  583. default:
  584. return 0;
  585. }
  586. }
  587. static void fill_payload_le16(struct stream *s, quadlet_t *data, int nevents)
  588. {
  589. quadlet_t *event, sample, bits;
  590. unsigned char *p;
  591. int i, j;
  592. for (i = 0, event = data; i < nevents; i++) {
  593. for (j = 0; j < s->dimension; j++) {
  594. p = buffer_get_bytes(s->input, 2);
  595. sample = (p[1] << 16) | (p[0] << 8);
  596. bits = get_header_bits(s, j, sample);
  597. event[j] = cpu_to_be32((bits << 24) | sample);
  598. }
  599. event += s->dimension;
  600. if (++s->iec958_frame_count == 192)
  601. s->iec958_frame_count = 0;
  602. }
  603. }
  604. static void fill_packet(struct stream *s, struct packet *packet, int nevents)
  605. {
  606. int syt_index, syt, size;
  607. u32 control;
  608. size = (nevents * s->dimension + 2) * sizeof(quadlet_t);
  609. /* Update DMA descriptors */
  610. packet->db->payload_desc.status = 0;
  611. control = packet->db->payload_desc.control & 0xffff0000;
  612. packet->db->payload_desc.control = control | size;
  613. /* Fill IEEE1394 headers */
  614. packet->db->header_desc.header[0] =
  615. (SPEED_100 << 16) | (0x01 << 14) | 
  616. (s->iso_channel << 8) | (TCODE_ISO_DATA << 4);
  617. packet->db->header_desc.header[1] = size << 16;
  618. /* Calculate synchronization timestamp (syt). First we
  619.  * determine syt_index, that is, the index in the packet of
  620.  * the sample for which the timestamp is valid. */
  621. syt_index = (s->syt_interval - s->dbc) & (s->syt_interval - 1);
  622. if (syt_index < nevents) {
  623. syt = ((atomic_read(&s->cycle_count) << 12) | 
  624.        s->cycle_offset.integer) & 0xffff;
  625. fraction_add(&s->cycle_offset, 
  626.      &s->cycle_offset, &s->ticks_per_syt_offset);
  627. /* This next addition should be modulo 8000 (0x1f40),
  628.  * but we only use the lower 4 bits of cycle_count, so
  629.  * we dont need the modulo. */
  630. atomic_add(s->cycle_offset.integer / 3072, &s->cycle_count);
  631. s->cycle_offset.integer %= 3072;
  632. }
  633. else
  634. syt = 0xffff;
  635. atomic_inc(&s->cycle_count2);
  636. /* Fill cip header */
  637. packet->payload->eoh0 = 0;
  638. packet->payload->sid = s->host->host->node_id & 0x3f;
  639. packet->payload->dbs = s->dimension;
  640. packet->payload->fn = 0;
  641. packet->payload->qpc = 0;
  642. packet->payload->sph = 0;
  643. packet->payload->reserved = 0;
  644. packet->payload->dbc = s->dbc;
  645. packet->payload->eoh1 = 2;
  646. packet->payload->fmt = FMT_AMDTP;
  647. packet->payload->fdf = s->fdf;
  648. packet->payload->syt = cpu_to_be16(syt);
  649. switch (s->sample_format) {
  650. case AMDTP_INPUT_LE16:
  651. fill_payload_le16(s, packet->payload->data, nevents);
  652. break;
  653. }
  654. s->dbc += nevents;
  655. }
  656. static void stream_flush(struct stream *s)
  657. {
  658. struct packet *p;
  659. int nevents;
  660. struct fraction next;
  661. /* The AMDTP specifies two transmission modes: blocking and
  662.  * non-blocking.  In blocking mode you always transfer
  663.  * syt_interval or zero samples, whereas in non-blocking mode
  664.  * you send as many samples as you have available at transfer
  665.  * time.
  666.  *
  667.  * The fraction samples_per_cycle specifies the number of
  668.  * samples that become available per cycle.  We add this to
  669.  * the fraction ready_samples, which specifies the number of
  670.  * leftover samples from the previous transmission.  The sum,
  671.  * stored in the fraction next, specifies the number of
  672.  * samples available for transmission, and from this we
  673.  * determine the number of samples to actually transmit.
  674.  */
  675. while (1) {
  676. fraction_add(&next, &s->ready_samples, &s->samples_per_cycle);
  677. if (s->mode == AMDTP_MODE_BLOCKING) {
  678. if (fraction_floor(&next) >= s->syt_interval)
  679. nevents = s->syt_interval;
  680. else
  681. nevents = 0;
  682. }
  683. else
  684. nevents = fraction_floor(&next);
  685. p = stream_current_packet(s);
  686. if (s->input->length < nevents * s->dimension * 2 || p == NULL)
  687. break;
  688. fill_packet(s, p, nevents);
  689. stream_queue_packet(s);
  690. /* Now that we have successfully queued the packet for
  691.  * transmission, we update the fraction ready_samples. */
  692. fraction_sub_int(&s->ready_samples, &next, nevents);
  693. }
  694. }
  695. static int stream_alloc_packet_lists(struct stream *s)
  696. {
  697. int max_nevents, max_packet_size, i;
  698. if (s->mode == AMDTP_MODE_BLOCKING)
  699. max_nevents = s->syt_interval;
  700. else
  701. max_nevents = fraction_ceil(&s->samples_per_cycle);
  702. max_packet_size = max_nevents * s->dimension * 4 + 8;
  703. s->packet_pool = pci_pool_create("packet pool", s->host->ohci->dev,
  704.  max_packet_size, 0, 0, SLAB_KERNEL);
  705. if (s->packet_pool == NULL)
  706. return -1;
  707. INIT_LIST_HEAD(&s->free_packet_lists);
  708. INIT_LIST_HEAD(&s->dma_packet_lists);
  709. for (i = 0; i < MAX_PACKET_LISTS; i++) {
  710. struct packet_list *pl = packet_list_alloc(s);
  711. if (pl == NULL)
  712. break;
  713. list_add_tail(&pl->link, &s->free_packet_lists);
  714. }
  715. return i < MAX_PACKET_LISTS ? -1 : 0;
  716. }
  717. static void stream_free_packet_lists(struct stream *s)
  718. {
  719. struct list_head *lh, *next;
  720. if (s->current_packet_list != NULL)
  721. packet_list_free(s->current_packet_list, s);
  722. list_for_each_safe(lh, next, &s->dma_packet_lists)
  723. packet_list_free(list_entry(lh, struct packet_list, link), s);
  724. list_for_each_safe(lh, next, &s->free_packet_lists)
  725. packet_list_free(list_entry(lh, struct packet_list, link), s);
  726. if (s->packet_pool != NULL)
  727. pci_pool_destroy(s->packet_pool);
  728. s->current_packet_list = NULL;
  729. INIT_LIST_HEAD(&s->free_packet_lists);
  730. INIT_LIST_HEAD(&s->dma_packet_lists);
  731. s->packet_pool = NULL;
  732. }
  733. static void plug_update(struct cmp_pcr *plug, void *data)
  734. {
  735. struct stream *s = data;
  736. HPSB_INFO("plug update: p2p_count=%d, channel=%d",
  737.   plug->p2p_count, plug->channel);
  738. s->iso_channel = plug->channel;
  739. if (plug->p2p_count > 0) {
  740. struct packet_list *pl;
  741. pl = list_entry(s->dma_packet_lists.next, struct packet_list, link);
  742. stream_start_dma(s, pl);
  743. }
  744. else {
  745. ohci1394_stop_it_ctx(s->host->ohci, s->iso_tasklet.context, 0);
  746. }
  747. }
  748. static int stream_configure(struct stream *s, int cmd, struct amdtp_ioctl *cfg)
  749. {
  750. const int transfer_delay = 9000;
  751. if (cfg->format <= AMDTP_FORMAT_IEC958_AC3)
  752. s->format = cfg->format;
  753. else
  754. return -EINVAL;
  755. switch (cfg->rate) {
  756. case 32000:
  757. s->syt_interval = 8;
  758. s->fdf = FDF_SFC_32KHZ;
  759. s->iec958_rate_code = 0x0c;
  760. break;
  761. case 44100:
  762. s->syt_interval = 8;
  763. s->fdf = FDF_SFC_44K1HZ;
  764. s->iec958_rate_code = 0x00;
  765. break;
  766. case 48000:
  767. s->syt_interval = 8;
  768. s->fdf = FDF_SFC_48KHZ;
  769. s->iec958_rate_code = 0x04;
  770. break;
  771. case 88200:
  772. s->syt_interval = 16;
  773. s->fdf = FDF_SFC_88K2HZ;
  774. s->iec958_rate_code = 0x00;
  775. break;
  776. case 96000:
  777. s->syt_interval = 16;
  778. s->fdf = FDF_SFC_96KHZ;
  779. s->iec958_rate_code = 0x00;
  780. break;
  781. case 176400:
  782. s->syt_interval = 32;
  783. s->fdf = FDF_SFC_176K4HZ;
  784. s->iec958_rate_code = 0x00;
  785. break;
  786. case 192000:
  787. s->syt_interval = 32;
  788. s->fdf = FDF_SFC_192KHZ;
  789. s->iec958_rate_code = 0x00;
  790. break;
  791. default:
  792. return -EINVAL;
  793. }
  794. s->rate = cfg->rate;
  795. fraction_init(&s->samples_per_cycle, s->rate, 8000);
  796. fraction_init(&s->ready_samples, 0, 8000);
  797. /* The ticks_per_syt_offset is initialized to the number of
  798.  * ticks between syt_interval events.  The number of ticks per
  799.  * second is 24.576e6, so the number of ticks between
  800.  * syt_interval events is 24.576e6 * syt_interval / rate.
  801.  */
  802. fraction_init(&s->ticks_per_syt_offset,
  803.       24576000 * s->syt_interval, s->rate);
  804. fraction_init(&s->cycle_offset, (transfer_delay % 3072) * s->rate, s->rate);
  805. atomic_set(&s->cycle_count, transfer_delay / 3072);
  806. atomic_set(&s->cycle_count2, 0);
  807. s->mode = cfg->mode;
  808. s->sample_format = AMDTP_INPUT_LE16;
  809. /* When using the AM824 raw subformat we can stream signals of
  810.  * any dimension.  The IEC958 subformat, however, only
  811.  * supports 2 channels.
  812.  */
  813. if (s->format == AMDTP_FORMAT_RAW || cfg->dimension == 2)
  814. s->dimension = cfg->dimension;
  815. else
  816. return -EINVAL;
  817. if (s->opcr != NULL) {
  818. cmp_unregister_opcr(s->host->host, s->opcr);
  819. s->opcr = NULL;
  820. }
  821. switch(cmd) {
  822. case AMDTP_IOC_PLUG:
  823. s->opcr = cmp_register_opcr(s->host->host, cfg->u.plug,
  824.    /*payload*/ 12, plug_update, s);
  825. if (s->opcr == NULL)
  826. return -EINVAL;
  827. s->iso_channel = s->opcr->channel;
  828. break;
  829. case AMDTP_IOC_CHANNEL:
  830. if (cfg->u.channel >= 0 && cfg->u.channel < 64)
  831. s->iso_channel = cfg->u.channel;
  832. else
  833. return -EINVAL;
  834. break;
  835. }
  836. /* The ioctl settings were all valid, so we realloc the packet
  837.  * lists to make sure the packet size is big enough.
  838.  */
  839. if (s->packet_pool != NULL)
  840. stream_free_packet_lists(s);
  841. if (stream_alloc_packet_lists(s) < 0) {
  842. stream_free_packet_lists(s);
  843. return -ENOMEM;
  844. }
  845. return 0;
  846. }
  847. struct stream *stream_alloc(struct amdtp_host *host)
  848. {
  849. struct stream *s;
  850. unsigned long flags;
  851.         s = kmalloc(sizeof(struct stream), SLAB_KERNEL);
  852.         if (s == NULL)
  853.                 return NULL;
  854.         memset(s, 0, sizeof(struct stream));
  855. s->host = host;
  856. s->input = buffer_alloc(BUFFER_SIZE);
  857. if (s->input == NULL) {
  858. kfree(s);
  859. return NULL;
  860. }
  861. s->descriptor_pool = pci_pool_create("descriptor pool", host->ohci->dev,
  862.      sizeof(struct descriptor_block),
  863.      16, 0, SLAB_KERNEL);
  864. if (s->descriptor_pool == NULL) {
  865. kfree(s->input);
  866. kfree(s);
  867. return NULL;
  868. }
  869. INIT_LIST_HEAD(&s->free_packet_lists);
  870. INIT_LIST_HEAD(&s->dma_packet_lists);
  871.         init_waitqueue_head(&s->packet_list_wait);
  872.         spin_lock_init(&s->packet_list_lock);
  873. ohci1394_init_iso_tasklet(&s->iso_tasklet, OHCI_ISO_TRANSMIT,
  874.   stream_shift_packet_lists,
  875.   (unsigned long) s);
  876. if (ohci1394_register_iso_tasklet(host->ohci, &s->iso_tasklet) < 0) {
  877. pci_pool_destroy(s->descriptor_pool);
  878. kfree(s->input);
  879. kfree(s);
  880. return NULL;
  881. }
  882. spin_lock_irqsave(&host->stream_list_lock, flags);
  883. list_add_tail(&s->link, &host->stream_list);
  884. spin_unlock_irqrestore(&host->stream_list_lock, flags);
  885. return s;
  886. }
  887. void stream_free(struct stream *s)
  888. {
  889. unsigned long flags;
  890. /* Stop the DMA.  We wait for the dma packet list to become
  891.  * empty and let the dma controller run out of programs.  This
  892.  * seems to be more reliable than stopping it directly, since
  893.  * that sometimes generates an it transmit interrupt if we
  894.  * later re-enable the context.
  895.  */
  896. wait_event_interruptible(s->packet_list_wait, 
  897.  list_empty(&s->dma_packet_lists));
  898. ohci1394_stop_it_ctx(s->host->ohci, s->iso_tasklet.context, 1);
  899. ohci1394_unregister_iso_tasklet(s->host->ohci, &s->iso_tasklet);
  900. if (s->opcr != NULL)
  901. cmp_unregister_opcr(s->host->host, s->opcr);
  902. spin_lock_irqsave(&s->host->stream_list_lock, flags);
  903. list_del(&s->link);
  904. spin_unlock_irqrestore(&s->host->stream_list_lock, flags);
  905. kfree(s->input);
  906. stream_free_packet_lists(s);
  907. pci_pool_destroy(s->descriptor_pool);
  908. kfree(s);
  909. }
  910. /* File operations */
  911. static ssize_t amdtp_write(struct file *file, const char *buffer, size_t count,
  912.    loff_t *offset_is_ignored)
  913. {
  914. struct stream *s = file->private_data;
  915. unsigned char *p;
  916. int i;
  917. size_t length;
  918. if (s->packet_pool == NULL)
  919. return -EBADFD;
  920. /* Fill the circular buffer from the input buffer and call the
  921.  * iso packer when the buffer is full.  The iso packer may
  922.  * leave bytes in the buffer for two reasons: either the
  923.  * remaining bytes wasn't enough to build a new packet, or
  924.  * there were no free packet lists.  In the first case we
  925.  * re-fill the buffer and call the iso packer again or return
  926.  * if we used all the data from userspace.  In the second
  927.  * case, the wait_event_interruptible will block until the irq
  928.  * handler frees a packet list.
  929.  */
  930. for (i = 0; i < count; i += length) {
  931. p = buffer_put_bytes(s->input, count, &length);
  932. copy_from_user(p, buffer + i, length);
  933. if (s->input->length < s->input->size)
  934. continue;
  935. stream_flush(s);
  936. if (s->current_packet_list != NULL)
  937. continue;
  938. if (file->f_flags & O_NONBLOCK)
  939. return i + length > 0 ? i + length : -EAGAIN;
  940. if (wait_event_interruptible(s->packet_list_wait, 
  941.      !list_empty(&s->free_packet_lists)))
  942. return -EINTR;
  943. }
  944. return count;
  945. }
  946. static int amdtp_ioctl(struct inode *inode, struct file *file,
  947.    unsigned int cmd, unsigned long arg)
  948. {
  949. struct stream *s = file->private_data;
  950. struct amdtp_ioctl cfg;
  951. switch(cmd)
  952. {
  953. case AMDTP_IOC_PLUG:
  954. case AMDTP_IOC_CHANNEL:
  955. if (copy_from_user(&cfg, (struct amdtp_ioctl *) arg, sizeof cfg))
  956. return -EFAULT;
  957. else 
  958. return stream_configure(s, cmd, &cfg);
  959. default:
  960. return -EINVAL;
  961. }
  962. }
  963. static unsigned int amdtp_poll(struct file *file, poll_table *pt)
  964. {
  965. struct stream *s = file->private_data;
  966. poll_wait(file, &s->packet_list_wait, pt);
  967. if (!list_empty(&s->free_packet_lists))
  968. return POLLOUT | POLLWRNORM;
  969. else
  970. return 0;
  971. }
  972. static int amdtp_open(struct inode *inode, struct file *file)
  973. {
  974. struct amdtp_host *host;
  975. /* FIXME: We just grab the first registered host */
  976. spin_lock(&host_list_lock);
  977. if (!list_empty(&host_list))
  978. host = list_entry(host_list.next, struct amdtp_host, link);
  979. else
  980. host = NULL;
  981. spin_unlock(&host_list_lock);
  982. if (host == NULL)
  983. return -ENODEV;
  984. file->private_data = stream_alloc(host);
  985. if (file->private_data == NULL)
  986. return -ENOMEM;
  987. return 0;
  988. }
  989. static int amdtp_release(struct inode *inode, struct file *file)
  990. {
  991. struct stream *s = file->private_data;
  992. stream_free(s);
  993. return 0;
  994. }
  995. static struct file_operations amdtp_fops =
  996. {
  997. .owner = THIS_MODULE,
  998. .write = amdtp_write,
  999. .poll = amdtp_poll,
  1000. .ioctl = amdtp_ioctl,
  1001. .open = amdtp_open,
  1002. .release = amdtp_release
  1003. };
  1004. /* IEEE1394 Subsystem functions */
  1005. static void amdtp_add_host(struct hpsb_host *host)
  1006. {
  1007. struct amdtp_host *ah;
  1008. if (strcmp(host->driver->name, OHCI1394_DRIVER_NAME) != 0)
  1009. return;
  1010. ah = kmalloc(sizeof *ah, SLAB_KERNEL);
  1011. ah->host = host;
  1012. ah->ohci = host->hostdata;
  1013. INIT_LIST_HEAD(&ah->stream_list);
  1014. spin_lock_init(&ah->stream_list_lock);
  1015. spin_lock_irq(&host_list_lock);
  1016. list_add_tail(&ah->link, &host_list);
  1017. spin_unlock_irq(&host_list_lock);
  1018. }
  1019. static void amdtp_remove_host(struct hpsb_host *host)
  1020. {
  1021. struct list_head *lh;
  1022. struct amdtp_host *ah;
  1023. spin_lock_irq(&host_list_lock);
  1024. list_for_each(lh, &host_list) {
  1025. if (list_entry(lh, struct amdtp_host, link)->host == host) {
  1026. list_del(lh);
  1027. break;
  1028. }
  1029. }
  1030. spin_unlock_irq(&host_list_lock);
  1031. if (lh != &host_list) {
  1032. ah = list_entry(lh, struct amdtp_host, link);
  1033. kfree(ah);
  1034. }
  1035. else
  1036. HPSB_ERR("remove_host: bogus ohci host: %p", host);
  1037. }
  1038. static struct hpsb_highlevel_ops amdtp_highlevel_ops = {
  1039. .add_host = amdtp_add_host,
  1040. .remove_host = amdtp_remove_host,
  1041. };
  1042. /* Module interface */
  1043. MODULE_AUTHOR("Kristian Hogsberg <hogsberg@users.sf.net>");
  1044. MODULE_DESCRIPTION("Driver for Audio & Music Data Transmission Protocol "
  1045.    "on OHCI boards.");
  1046. MODULE_SUPPORTED_DEVICE("amdtp");
  1047. MODULE_LICENSE("GPL");
  1048. static int __init amdtp_init_module (void)
  1049. {
  1050. if (ieee1394_register_chardev(IEEE1394_MINOR_BLOCK_AMDTP,
  1051.       THIS_MODULE, &amdtp_fops)) {
  1052. HPSB_ERR("amdtp: unable to get minor device block");
  1053.   return -EIO;
  1054.   }
  1055. amdtp_highlevel = hpsb_register_highlevel ("amdtp",
  1056.    &amdtp_highlevel_ops);
  1057. if (amdtp_highlevel == NULL) {
  1058. HPSB_ERR("amdtp: unable to register highlevel ops");
  1059. ieee1394_unregister_chardev(IEEE1394_MINOR_BLOCK_AMDTP);
  1060. return -EIO;
  1061. }
  1062. HPSB_INFO("Loaded AMDTP driver");
  1063. return 0;
  1064. }
  1065. static void __exit amdtp_exit_module (void)
  1066. {
  1067.         hpsb_unregister_highlevel(amdtp_highlevel);
  1068.         ieee1394_unregister_chardev(IEEE1394_MINOR_BLOCK_AMDTP);
  1069. HPSB_INFO("Unloaded AMDTP driver");
  1070. }
  1071. module_init(amdtp_init_module);
  1072. module_exit(amdtp_exit_module);