Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 09a3311c authored by Jakub Kicinski's avatar Jakub Kicinski Committed by John W. Linville
Browse files

rt2800: Add documentation on MCU requests



Add documentation on MCU communication, some of known commands and
their arguments. Supplement command ids.

Signed-off-by: default avatarJakub Kicinski <kubakici@wp.pl>
Acked-by: default avatarIvo van Doorn <IvDoorn@gmail.com>
Acked-by: default avatarGertjan van Wingerde <gwingerde@gmail.com>
Signed-off-by: default avatarJohn W. Linville <linville@tuxdriver.com>
parent 2530c55e
Loading
Loading
Loading
Loading
+14 −1
Original line number Diff line number Diff line
@@ -1637,6 +1637,7 @@ struct mac_iveiv_entry {

/*
 * H2M_MAILBOX_CSR: Host-to-MCU Mailbox.
 * CMD_TOKEN: Command id, 0xff disable status reporting.
 */
#define H2M_MAILBOX_CSR			0x7010
#define H2M_MAILBOX_CSR_ARG0		FIELD32(0x000000ff)
@@ -1646,6 +1647,8 @@ struct mac_iveiv_entry {

/*
 * H2M_MAILBOX_CID:
 * Free slots contain 0xff. MCU will store command's token to lowest free slot.
 * If all slots are occupied status will be dropped.
 */
#define H2M_MAILBOX_CID			0x7014
#define H2M_MAILBOX_CID_CMD0		FIELD32(0x000000ff)
@@ -1655,6 +1658,7 @@ struct mac_iveiv_entry {

/*
 * H2M_MAILBOX_STATUS:
 * Command status will be saved to same slot as command id.
 */
#define H2M_MAILBOX_STATUS		0x701c

@@ -2298,6 +2302,12 @@ struct mac_iveiv_entry {

/*
 * MCU mailbox commands.
 * MCU_SLEEP - go to power-save mode.
 *             arg1: 1: save as much power as possible, 0: save less power.
 *             status: 1: success, 2: already asleep,
 *                     3: maybe MAC is busy so can't finish this task.
 * MCU_RADIO_OFF
 *             arg0: 0: do power-saving, NOT turn off radio.
 */
#define MCU_SLEEP			0x30
#define MCU_WAKEUP			0x31
@@ -2318,7 +2328,10 @@ struct mac_iveiv_entry {
/*
 * MCU mailbox tokens
 */
#define TOKEN_WAKUP			3
#define TOKEN_SLEEP			1
#define TOKEN_RADIO_OFF			2
#define TOKEN_WAKEUP			3


/*
 * DMA descriptor defines.
+5 −3
Original line number Diff line number Diff line
@@ -522,14 +522,16 @@ static int rt2800pci_set_state(struct rt2x00_dev *rt2x00dev,
			       enum dev_state state)
{
	if (state == STATE_AWAKE) {
		rt2800_mcu_request(rt2x00dev, MCU_WAKEUP, TOKEN_WAKUP, 0, 0x02);
		rt2800pci_mcu_status(rt2x00dev, TOKEN_WAKUP);
		rt2800_mcu_request(rt2x00dev, MCU_WAKEUP, TOKEN_WAKEUP,
				   0, 0x02);
		rt2800pci_mcu_status(rt2x00dev, TOKEN_WAKEUP);
	} else if (state == STATE_SLEEP) {
		rt2x00pci_register_write(rt2x00dev, H2M_MAILBOX_STATUS,
					 0xffffffff);
		rt2x00pci_register_write(rt2x00dev, H2M_MAILBOX_CID,
					 0xffffffff);
		rt2800_mcu_request(rt2x00dev, MCU_SLEEP, 0x01, 0xff, 0x01);
		rt2800_mcu_request(rt2x00dev, MCU_SLEEP, TOKEN_SLEEP,
				   0xff, 0x01);
	}

	return 0;