Skip to content

Commit 3b48b2c

Browse files
AlexJones0marnovandermaas
authored andcommitted
Update USBDev utils, tests & PLIC tests for refactored driver
1 parent 2417533 commit 3b48b2c

4 files changed

Lines changed: 48 additions & 48 deletions

File tree

sw/cheri/checks/usbdev_check.cc

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -40,17 +40,17 @@ static void write_strn(UartPtr uart, const char *str, size_t len) {
4040
static const uint8_t _Alignas(uint32_t) signon[] = "Hello from CHERI USB!\r\n";
4141

4242
// Device Descriptor; see "Table 9-8. Standard Device Descriptor"
43-
static const uint8_t _Alignas(uint32_t) dev_dscr[] = {0x12u, 1, 0, 2, 0, 0, 0, OpenTitanUsbdev::MaxPacketLen,
44-
0xd1, 0x18, 0x3a, 0x50, // Google lowRISC generic FS USB
45-
0, 1, 0, 0, 0, 1};
43+
static const uint8_t _Alignas(uint32_t) dev_dscr[] = {
44+
0x12u, 1, 0, 2, 0, 0, 0, OpenTitanUsbdev::MaxPacketLength, 0xd1, 0x18, 0x3a, 0x50, // Google lowRISC generic FS USB
45+
0, 1, 0, 0, 0, 1};
4646

4747
// Configuration Descriptor; see "Table 9-10. Standard Configuration Descriptor"
4848
static const uint8_t _Alignas(uint32_t) cfg_dscr[] = {
4949
// Present a single interface consisting of an IN EP and and OUT EP.
5050
USB_CFG_DSCR_HEAD(USB_CFG_DSCR_LEN + (USB_INTERFACE_DSCR_LEN + 2 * USB_EP_DSCR_LEN), 1),
5151
VEND_INTERFACE_DSCR(0, 2, 0x50, 1),
52-
USB_BULK_EP_DSCR(0, 1, OpenTitanUsbdev::MaxPacketLen, 0),
53-
USB_BULK_EP_DSCR(1, 1, OpenTitanUsbdev::MaxPacketLen, 4),
52+
USB_BULK_EP_DSCR(0, 1, OpenTitanUsbdev::MaxPacketLength, 0),
53+
USB_BULK_EP_DSCR(1, 1, OpenTitanUsbdev::MaxPacketLength, 4),
5454
};
5555

5656
// Default test descriptor; required by the USB DPI model and retrieved using a Vendor Specific
@@ -67,7 +67,7 @@ static void rxCallback(void *rxHandle, uint8_t ep, bool setup, const uint8_t *da
6767

6868
[[noreturn]] extern "C" void entry_point(void *rwRoot) {
6969
// Buffer for data transfer to/from the USB device.
70-
// uint8_t _Alignas(uint32_t) data[OpenTitanUsbdev::MaxPacketLen];
70+
// uint8_t _Alignas(uint32_t) data[OpenTitanUsbdev::MaxPacketLength];
7171

7272
Capability<void> root{rwRoot};
7373

sw/cheri/common/usbdev-utils.hh

Lines changed: 15 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -140,7 +140,7 @@ class UsbdevUtils {
140140
cfgLen(cfg_len),
141141
testDscr(test),
142142
testLen(test_len),
143-
bufAvail(((uint64_t)1u << OpenTitanUsbdev::NumBuffers) - 1u) {
143+
bufAvail(((uint64_t)1u << OpenTitanUsbdev::BufferCount) - 1u) {
144144
// Initialise the device and track which packet buffers are still available for use.
145145
int rc = usbdev->init(bufAvail);
146146
assert(!rc);
@@ -180,7 +180,7 @@ class UsbdevUtils {
180180
/// Allocate a buffer.
181181
bool buf_alloc(uint8_t &bufNum) {
182182
if (bufAvail) {
183-
for (bufNum = 0U; bufNum < OpenTitanUsbdev::NumBuffers; ++bufNum) {
183+
for (bufNum = 0U; bufNum < OpenTitanUsbdev::BufferCount; ++bufNum) {
184184
if (1U & (bufAvail >> bufNum)) {
185185
bufAvail &= ~((uint64_t)1U << bufNum);
186186
return true;
@@ -237,9 +237,9 @@ class UsbdevUtils {
237237
/// Send a packet of data over the USB to the host controller.
238238
bool send_data(uint8_t ep, const uint32_t *data, uint16_t pktLen) {
239239
uint8_t bufNum;
240-
assert(pktLen <= OpenTitanUsbdev::MaxPacketLen);
240+
assert(pktLen <= OpenTitanUsbdev::MaxPacketLength);
241241
if (!buf_alloc(bufNum)) return false;
242-
if (usbdev->send_packet(bufNum, ep, data, (uint8_t)pktLen)) {
242+
if (usbdev->packet_send(bufNum, ep, data, (uint8_t)pktLen)) {
243243
buf_release(bufNum);
244244
return false;
245245
}
@@ -253,15 +253,15 @@ class UsbdevUtils {
253253
// controller; this must be done promptly not just for performance reasons but also to ensure
254254
// that IN Control Transfers conclude their Data Stage before the Status Stage commences.
255255
uint8_t ep, bufNum;
256-
int rc = usbdev->packet_collected(ep, bufNum);
256+
int rc = usbdev->retrieve_collected_packet(ep, bufNum);
257257
while (!rc) {
258258
// Release the buffer for reuse.
259259
buf_release(bufNum);
260260
if (epInCtx[ep].txDoneCallback) {
261261
// Invoke the 'done' handler for this IN endpoint.
262262
epInCtx[ep].txDoneCallback(epInCtx[ep].txDoneHandle, rc);
263263
}
264-
rc = usbdev->packet_collected(ep, bufNum);
264+
rc = usbdev->retrieve_collected_packet(ep, bufNum);
265265
}
266266

267267
// Ensure that the packet reception FIFOs remains supplied with buffers.
@@ -270,15 +270,15 @@ class UsbdevUtils {
270270
// Process received packets.
271271
uint16_t pktLen;
272272
bool isSetup;
273-
rc = usbdev->recv_packet(ep, bufNum, pktLen, isSetup, packetData);
273+
rc = usbdev->packet_receive(bufNum, ep, pktLen, isSetup, packetData);
274274
while (!rc) {
275275
// Release the buffer for reuse.
276276
buf_release(bufNum);
277277
if (epOutCtx[ep].recvCallback) {
278278
const uint8_t *pktData = reinterpret_cast<uint8_t *>(packetData);
279279
epOutCtx[ep].recvCallback(epOutCtx[ep].recvHandle, ep, isSetup, pktData, pktLen);
280280
}
281-
rc = usbdev->recv_packet(ep, bufNum, pktLen, isSetup, packetData);
281+
rc = usbdev->packet_receive(bufNum, ep, pktLen, isSetup, packetData);
282282
}
283283
}
284284

@@ -315,22 +315,22 @@ class UsbdevUtils {
315315
switch (data[3]) {
316316
case kUsbDescTypeDevice:
317317
if (wLen > devLen) wLen = devLen;
318-
rc = usbdev->send_packet(bufNum, 0u, (uint32_t *)devDscr, (uint8_t)wLen);
318+
rc = usbdev->packet_send(bufNum, 0u, (uint32_t *)devDscr, (uint8_t)wLen);
319319
assert(!rc);
320320
ctrlState = Ctrl_StatusGetDesc;
321321
release = false;
322322
break;
323323

324324
case kUsbDescTypeConfiguration:
325325
if (wLen > cfgLen) wLen = cfgLen;
326-
rc = usbdev->send_packet(bufNum, 0u, (uint32_t *)cfgDscr, (uint8_t)wLen);
326+
rc = usbdev->packet_send(bufNum, 0u, (uint32_t *)cfgDscr, (uint8_t)wLen);
327327
assert(!rc);
328328
ctrlState = Ctrl_StatusGetDesc;
329329
release = false;
330330
break;
331331

332332
default:
333-
rc = usbdev->set_ep_stalling(0u, true);
333+
rc = usbdev->set_endpoint_stalling(0u, true);
334334
assert(!rc);
335335
break;
336336
}
@@ -340,15 +340,15 @@ class UsbdevUtils {
340340
case kUsbSetupReqSetAddress:
341341
devAddr = (uint8_t)wValue;
342342
// Send a Zero Length Packet as ACK.
343-
rc = usbdev->send_packet(bufNum, 0u, nullptr, 0u);
343+
rc = usbdev->packet_send(bufNum, 0u, nullptr, 0u);
344344
assert(!rc);
345345
ctrlState = Ctrl_StatusSetAddr;
346346
release = false;
347347
break;
348348

349349
// SET_CONFIGURATION request.
350350
case kUsbSetupReqSetConfiguration:
351-
rc = usbdev->send_packet(bufNum, 0u, nullptr, 0u); // ZLP ACK.
351+
rc = usbdev->packet_send(bufNum, 0u, nullptr, 0u); // ZLP ACK.
352352
assert(!rc);
353353
ctrlState = Ctrl_StatusSetConfig;
354354
release = false;
@@ -358,7 +358,7 @@ class UsbdevUtils {
358358
// configuration.
359359
case kVendorSetupReqTestConfig:
360360
if (wLen > testLen) wLen = testLen;
361-
rc = usbdev->send_packet(bufNum, 0u, (uint32_t *)testDscr, (uint8_t)wLen);
361+
rc = usbdev->packet_send(bufNum, 0u, (uint32_t *)testDscr, (uint8_t)wLen);
362362
assert(!rc);
363363
ctrlState = Ctrl_StatusGetDesc;
364364
release = false;
@@ -444,5 +444,5 @@ class UsbdevUtils {
444444
} epOutCtx[OpenTitanUsbdev::MaxEndpoints];
445445

446446
// Buffer for received packet data.
447-
uint32_t packetData[OpenTitanUsbdev::MaxPacketLen >> 2];
447+
uint32_t packetData[OpenTitanUsbdev::MaxPacketLength >> 2];
448448
};

sw/cheri/tests/plic_tests.hh

Lines changed: 24 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -248,44 +248,44 @@ struct PlicTest {
248248
instance = 0;
249249

250250
struct usbdev_irq {
251-
OpenTitanUsbdev::OpenTitanUsbdevInterrupt id;
251+
OpenTitanUsbdev::UsbdevInterrupt id;
252252
bool can_clear;
253253
};
254254
static constexpr std::array<usbdev_irq, 18> usbdevMap = {{
255-
{OpenTitanUsbdev::OpenTitanUsbdevInterrupt::InterruptDisconnected, true},
256-
{OpenTitanUsbdev::OpenTitanUsbdevInterrupt::InterruptHostLost, true},
257-
{OpenTitanUsbdev::OpenTitanUsbdevInterrupt::InterruptLinkReset, true},
258-
{OpenTitanUsbdev::OpenTitanUsbdevInterrupt::InterruptLinkSuspend, true},
259-
{OpenTitanUsbdev::OpenTitanUsbdevInterrupt::InterruptLinkResume, true},
260-
{OpenTitanUsbdev::OpenTitanUsbdevInterrupt::InterruptAvBufferOverflow, true},
261-
{OpenTitanUsbdev::OpenTitanUsbdevInterrupt::InterruptLinkInError, true},
262-
{OpenTitanUsbdev::OpenTitanUsbdevInterrupt::InterruptCrcError, true},
263-
{OpenTitanUsbdev::OpenTitanUsbdevInterrupt::InterruptPidError, true},
264-
{OpenTitanUsbdev::OpenTitanUsbdevInterrupt::InterruptBitstuffError, true},
265-
{OpenTitanUsbdev::OpenTitanUsbdevInterrupt::InterruptFrame, true},
266-
{OpenTitanUsbdev::OpenTitanUsbdevInterrupt::InterruptPowered, true},
267-
{OpenTitanUsbdev::OpenTitanUsbdevInterrupt::InterruptLinkOutError, true},
268-
269-
{OpenTitanUsbdev::OpenTitanUsbdevInterrupt::InterruptPacketReceived, false},
270-
{OpenTitanUsbdev::OpenTitanUsbdevInterrupt::InterruptPacketSent, false},
271-
{OpenTitanUsbdev::OpenTitanUsbdevInterrupt::InterruptRecvFifoFull, false},
272-
{OpenTitanUsbdev::OpenTitanUsbdevInterrupt::InterruptAvOutBufferEmpty, false},
273-
{OpenTitanUsbdev::OpenTitanUsbdevInterrupt::InterruptAvSetupBufferEmpty, false},
255+
{OpenTitanUsbdev::UsbdevInterrupt::Disconnected, true},
256+
{OpenTitanUsbdev::UsbdevInterrupt::HostLost, true},
257+
{OpenTitanUsbdev::UsbdevInterrupt::LinkReset, true},
258+
{OpenTitanUsbdev::UsbdevInterrupt::LinkSuspend, true},
259+
{OpenTitanUsbdev::UsbdevInterrupt::LinkResume, true},
260+
{OpenTitanUsbdev::UsbdevInterrupt::AvailableBufferOverflow, true},
261+
{OpenTitanUsbdev::UsbdevInterrupt::LinkInError, true},
262+
{OpenTitanUsbdev::UsbdevInterrupt::RedundancyCheckError, true},
263+
{OpenTitanUsbdev::UsbdevInterrupt::PacketIdentifierError, true},
264+
{OpenTitanUsbdev::UsbdevInterrupt::BitstuffingError, true},
265+
{OpenTitanUsbdev::UsbdevInterrupt::FrameUpdated, true},
266+
{OpenTitanUsbdev::UsbdevInterrupt::Powered, true},
267+
{OpenTitanUsbdev::UsbdevInterrupt::LinkOutError, true},
268+
269+
{OpenTitanUsbdev::UsbdevInterrupt::PacketReceived, false},
270+
{OpenTitanUsbdev::UsbdevInterrupt::PacketSent, false},
271+
{OpenTitanUsbdev::UsbdevInterrupt::ReceiveFull, false},
272+
{OpenTitanUsbdev::UsbdevInterrupt::AvailableOutEmpty, false},
273+
{OpenTitanUsbdev::UsbdevInterrupt::AvailableSetupEmpty, false},
274274
}};
275275

276276
auto usbdev = usbdev_ptr(root);
277277

278278
// Ensure that initially all interrupts are cleared and disabled.
279-
usbdev->interrupt_disable(static_cast<OpenTitanUsbdev::OpenTitanUsbdevInterrupt>(~0u));
279+
usbdev->interrupt_disable(static_cast<OpenTitanUsbdev::UsbdevInterrupt>(~0u));
280280
usbdev->interruptState = ~0u;
281281
usbdev->interruptTest = 0u;
282282

283283
log_->println(" Testing USBDEV:");
284284
for (size_t i = 0; i < usbdevMap.size(); ++i) {
285-
ip_irq_id = usbdevMap[i].id;
285+
ip_irq_id = static_cast<uint32_t>(usbdevMap[i].id);
286286
is_irq_clearable = usbdevMap[i].can_clear;
287287
plic_irq_id = static_cast<PLIC::Interrupts>(PLIC::Interrupts::Usbdev + instance);
288-
exp_intr_state = usbdevMap[i].id;
288+
exp_intr_state = static_cast<uint32_t>(usbdevMap[i].id);
289289

290290
// Register interrupt handler.
291291
irq_handler = [](PlicTest *plic_test, PLIC::Interrupts irq) {
@@ -314,7 +314,7 @@ struct PlicTest {
314314
usbdev->interruptTest = 0;
315315
}
316316
// Disable interrupt to prevent interference with other tests.
317-
usbdev->interrupt_disable(static_cast<OpenTitanUsbdev::OpenTitanUsbdevInterrupt>(ip_irq_id));
317+
usbdev->interrupt_disable(static_cast<OpenTitanUsbdev::UsbdevInterrupt>(ip_irq_id));
318318
}
319319

320320
// Wait with timeout until an interrupt occurs, logging any mismatch.

sw/cheri/tests/usbdev_tests.hh

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -29,15 +29,15 @@ using namespace CHERI;
2929

3030
// Device Descriptor; see "Table 9-8. Standard Device Descriptor"
3131
static const uint8_t _Alignas(uint32_t) deviceDescriptor[] = {
32-
0x12u, 1, 0, 2, 0, 0, 0, OpenTitanUsbdev::MaxPacketLen, 0xd1, 0x18, 0x3a, 0x50, 0, 1, 0, 0, 0, 1};
32+
0x12u, 1, 0, 2, 0, 0, 0, OpenTitanUsbdev::MaxPacketLength, 0xd1, 0x18, 0x3a, 0x50, 0, 1, 0, 0, 0, 1};
3333

3434
// Configuration Descriptor; see "Table 9-10. Standard Configuration Descriptor"
3535
static const uint8_t _Alignas(uint32_t) configDescriptor[] = {
3636
// Present a single interface consisting of an IN EP and and OUT EP.
3737
USB_CFG_DSCR_HEAD(USB_CFG_DSCR_LEN + (USB_INTERFACE_DSCR_LEN + 2 * USB_EP_DSCR_LEN), 1),
3838
VEND_INTERFACE_DSCR(0, 2, 0x50, 1),
39-
USB_BULK_EP_DSCR(0, 1, OpenTitanUsbdev::MaxPacketLen, 0),
40-
USB_BULK_EP_DSCR(1, 1, OpenTitanUsbdev::MaxPacketLen, 4),
39+
USB_BULK_EP_DSCR(0, 1, OpenTitanUsbdev::MaxPacketLength, 0),
40+
USB_BULK_EP_DSCR(1, 1, OpenTitanUsbdev::MaxPacketLength, 4),
4141
};
4242

4343
// Default test descriptor; required by the USB DPI model and retrieved using a

0 commit comments

Comments
 (0)