Latest compatible version of Classicube from the original GitHub repository (https://github.com/ClassiCube/ClassiCube) that can be compiled on Classicube for PowerMac PPC running Mac OS X 10.4.
This commit is contained in:
82
third_party/dsiwifi/arm_iop/source/ath/htc.twl.c
vendored
Normal file
82
third_party/dsiwifi/arm_iop/source/ath/htc.twl.c
vendored
Normal file
@@ -0,0 +1,82 @@
|
||||
/*
|
||||
* Copyright (c) 2021 Max Thomas
|
||||
* This file is part of DSiWifi and is distributed under the MIT license.
|
||||
* See dsiwifi_license.txt for terms of use.
|
||||
*/
|
||||
|
||||
#include "htc.h"
|
||||
|
||||
#include "utils.h"
|
||||
#include "wifi_debug.h"
|
||||
|
||||
#include "ath/mbox.h"
|
||||
#include "ath/wmi.h"
|
||||
#include "wifi_card.h"
|
||||
|
||||
static u8 htc_buffer[0x80];
|
||||
|
||||
// WMI handshakes
|
||||
|
||||
void htc_handle_pkt(u16 pkt_cmd, u8* pkt_data, u32 len, u32 ack_len)
|
||||
{
|
||||
switch (pkt_cmd)
|
||||
{
|
||||
case HTC_MSG_READY:
|
||||
{
|
||||
wifi_printlnf("HTC_MSG_READY, len %02x %02x", len, ack_len);
|
||||
|
||||
const u8 wmi_handshake_1[6] = {0x0,0x1,0x0,0,0,0};
|
||||
const u8 wmi_handshake_2[6] = {0x1,0x1,0x5,0,0,0};
|
||||
const u8 wmi_handshake_3[6] = {0x2,0x1,0x5,0,0,0};
|
||||
const u8 wmi_handshake_4[6] = {0x3,0x1,0x5,0,0,0};
|
||||
const u8 wmi_handshake_5[6] = {0x4,0x1,0x5,0,0,0};
|
||||
|
||||
// Handshake
|
||||
htc_send_pkt(HTC_MSG_CONN_SVC, MBOXPKT_NOACK, wmi_handshake_1, sizeof(wmi_handshake_1));
|
||||
wifi_card_mbox0_readpkt();
|
||||
htc_send_pkt(HTC_MSG_CONN_SVC, MBOXPKT_NOACK, wmi_handshake_2, sizeof(wmi_handshake_2));
|
||||
wifi_card_mbox0_readpkt();
|
||||
htc_send_pkt(HTC_MSG_CONN_SVC, MBOXPKT_NOACK, wmi_handshake_3, sizeof(wmi_handshake_3));
|
||||
wifi_card_mbox0_readpkt();
|
||||
htc_send_pkt(HTC_MSG_CONN_SVC, MBOXPKT_NOACK, wmi_handshake_4, sizeof(wmi_handshake_4));
|
||||
wifi_card_mbox0_readpkt();
|
||||
htc_send_pkt(HTC_MSG_CONN_SVC, MBOXPKT_NOACK, wmi_handshake_5, sizeof(wmi_handshake_5));
|
||||
wifi_card_mbox0_readpkt();
|
||||
htc_send_pkt(HTC_MSG_SETUP_COMPLETE, MBOXPKT_NOACK, NULL, 0);
|
||||
|
||||
wifi_card_write_func1_u32(0x418, 0x010300D1); // INT_STATUS_ENABLE (or 0x1?)
|
||||
wifi_card_write_func0_u8(0x4, 0x3); // CCCR irq_enable, master+func1
|
||||
|
||||
break;
|
||||
}
|
||||
case HTC_MSG_CONN_SVC_RESP:
|
||||
//wifi_printlnf("HTC_MSG_CONN_SVC_RESP");
|
||||
break;
|
||||
case HTC_MSG_UNK_0201:
|
||||
//wifi_printlnf("HTC_ACK");
|
||||
break;
|
||||
case HTC_MSG_UNK_0401:
|
||||
break;
|
||||
default:
|
||||
wifi_printlnf("HTC pkt ID %04x, len %02x %02x", pkt_cmd, len, ack_len);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
void htc_send_pkt(u16 htc_type, u8 ack_type, const void* data, u16 len)
|
||||
{
|
||||
memset(htc_buffer, 0, sizeof(htc_buffer));
|
||||
|
||||
*(u16*)&htc_buffer[0] = htc_type;
|
||||
|
||||
// Truncate to htc_buffer size
|
||||
if (len > (sizeof(htc_buffer) - sizeof(u16)))
|
||||
len = (sizeof(htc_buffer) - sizeof(u16));
|
||||
|
||||
if (data)
|
||||
memcpy(&htc_buffer[2], data, len);
|
||||
|
||||
len += sizeof(u16);
|
||||
|
||||
wifi_card_mbox0_send_packet(MBOXPKT_HTC, ack_type, htc_buffer, len, 0);
|
||||
}
|
||||
Reference in New Issue
Block a user