Blame view

Documentation/video4linux/cx2341x/fw-calling.txt 2.75 KB
447d6fb8c   Mauro Carvalho Chehab   V4L/DVB (3809b): ...
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
  This page describes how to make calls to the firmware api.
  
  How to call
  ===========
  
  The preferred calling convention is known as the firmware mailbox. The
  mailboxes are basically a fixed length array that serves as the call-stack.
  
  Firmware mailboxes can be located by searching the encoder and decoder memory
  for a 16 byte signature. That signature will be located on a 256-byte boundary.
  
  Signature:
  0x78, 0x56, 0x34, 0x12, 0x12, 0x78, 0x56, 0x34,
  0x34, 0x12, 0x78, 0x56, 0x56, 0x34, 0x12, 0x78
  
  The firmware implements 20 mailboxes of 20 32-bit words. The first 10 are
  reserved for API calls. The second 10 are used by the firmware for event
  notification.
  
    Index  Name
    -----  ----
    0      Flags
    1      Command
    2      Return value
    3      Timeout
    4-19   Parameter/Result
  
  
  The flags are defined in the following table. The direction is from the
  perspective of the firmware.
  
    Bit  Direction  Purpose
    ---  ---------  -------
    2    O          Firmware has processed the command.
    1    I          Driver has finished setting the parameters.
    0    I          Driver is using this mailbox.
  
  
  The command is a 32-bit enumerator. The API specifics may be found in the
  fw-*-api.txt documents.
  
  The return value is a 32-bit enumerator. Only two values are currently defined:
  0=success and -1=command undefined.
  
  There are 16 parameters/results 32-bit fields. The driver populates these fields
  with values for all the parameters required by the call. The driver overwrites
  these fields with result values returned by the call. The API specifics may be
  found in the fw-*-api.txt documents.
  
  The timeout value protects the card from a hung driver thread. If the driver
  doesn't handle the completed call within the timeout specified, the firmware
  will reset that mailbox.
  
  To make an API call, the driver iterates over each mailbox looking for the
  first one available (bit 0 has been cleared). The driver sets that bit, fills
  in the command enumerator, the timeout value and any required parameters. The
  driver then sets the parameter ready bit (bit 1). The firmware scans the
  mailboxes for pending commands, processes them, sets the result code, populates
  the result value array with that call's return values and sets the call
  complete bit (bit 2). Once bit 2 is set, the driver should retrieve the results
  and clear all the flags. If the driver does not perform this task within the
  time set in the timeout register, the firmware will reset that mailbox.
  
  Event notifications are sent from the firmware to the host. The host tells the
  firmware which events it is interested in via an API call. That call tells the
  firmware which notification mailbox to use. The firmware signals the host via
  an interrupt. Only the 16 Results fields are used, the Flags, Command, Return
  value and Timeout words are not used.