diff --git a/.clang-format b/.clang-format index d8e50d4..280c360 100644 --- a/.clang-format +++ b/.clang-format @@ -26,6 +26,7 @@ ColumnLimit: 100 BreakBeforeBinaryOperators: None BreakBeforeTernaryOperators: true BreakStringLiterals: false +BreakBinaryOperations: RespectPrecedence # Spacing SpaceBeforeParens: Always diff --git a/kernel/Flanterm/src/flanterm.c b/kernel/Flanterm/src/flanterm.c index 39aef33..fc20663 100644 --- a/kernel/Flanterm/src/flanterm.c +++ b/kernel/Flanterm/src/flanterm.c @@ -172,7 +172,9 @@ static void sgr (struct flanterm_context* ctx) { continue; } - else if (ctx->esc_values[i] == 2 || ctx->esc_values[i] == 3 || ctx->esc_values[i] == 4 || + else if (ctx->esc_values[i] == 2 || + ctx->esc_values[i] == 3 || + ctx->esc_values[i] == 4 || ctx->esc_values[i] == 8) { continue; } @@ -986,7 +988,8 @@ static void control_sequence_parse (struct flanterm_context* ctx, uint8_t c) { if (ctx->esc_values_i > 1) { ctx->scroll_bottom_margin = ctx->esc_values[1]; } - if (ctx->scroll_top_margin >= ctx->rows || ctx->scroll_bottom_margin > ctx->rows || + if (ctx->scroll_top_margin >= ctx->rows || + ctx->scroll_bottom_margin > ctx->rows || ctx->scroll_top_margin >= (ctx->scroll_bottom_margin - 1)) { ctx->scroll_top_margin = 0; ctx->scroll_bottom_margin = ctx->rows; diff --git a/kernel/amd64/mm.c b/kernel/amd64/mm.c index 3adc750..bd7be30 100644 --- a/kernel/amd64/mm.c +++ b/kernel/amd64/mm.c @@ -272,8 +272,11 @@ uintptr_t mm_p2v (struct pd* pd, uintptr_t paddr) { for (size_t i1 = 0; i1 < 512; i1++) { if ((pml1[i1] & AMD64_PG_PRESENT) && ((pml1[i1] & ~0xFFFULL) == (paddr & ~0xFFFULL))) { struct pg_index idx = {i4, i3, i2, i1}; - ret = (((uint64_t)idx.pml4 << 39) | ((uint64_t)idx.pml3 << 30) | - ((uint64_t)idx.pml2 << 21) | ((uint64_t)idx.pml1 << 12) | (paddr & 0xFFFULL)); + ret = (((uint64_t)idx.pml4 << 39) | + ((uint64_t)idx.pml3 << 30) | + ((uint64_t)idx.pml2 << 21) | + ((uint64_t)idx.pml1 << 12) | + (paddr & 0xFFFULL)); goto done; } } diff --git a/kernel/device/pci/pci.c b/kernel/device/pci/pci.c index 6b01852..a60e7cf 100644 --- a/kernel/device/pci/pci.c +++ b/kernel/device/pci/pci.c @@ -21,8 +21,11 @@ static spin_lock_t pci_lock = SPIN_LOCK_INIT; uint32_t pci_read32 (uint8_t bus, uint8_t slot, uint8_t func, uint8_t offset) { uint64_t fpci; - uint32_t addr = (uint32_t)((uint32_t)bus << 16) | ((uint32_t)slot << 11) | ((uint32_t)func << 8) | - (offset & 0xFC) | ((uint32_t)0x80000000); + uint32_t addr = (uint32_t)((uint32_t)bus << 16) | + ((uint32_t)slot << 11) | + ((uint32_t)func << 8) | + (offset & 0xFC) | + ((uint32_t)0x80000000); spin_lock (&pci_lock, &fpci); @@ -37,8 +40,11 @@ uint32_t pci_read32 (uint8_t bus, uint8_t slot, uint8_t func, uint8_t offset) { void pci_write32 (uint8_t bus, uint8_t slot, uint8_t func, uint8_t offset, uint32_t value) { uint64_t fpci; - uint32_t addr = (uint32_t)((uint32_t)bus << 16) | ((uint32_t)slot << 11) | ((uint32_t)func << 8) | - (offset & 0xFC) | ((uint32_t)0x80000000); + uint32_t addr = (uint32_t)((uint32_t)bus << 16) | + ((uint32_t)slot << 11) | + ((uint32_t)func << 8) | + (offset & 0xFC) | + ((uint32_t)0x80000000); spin_lock (&pci_lock, &fpci); @@ -51,8 +57,11 @@ void pci_write32 (uint8_t bus, uint8_t slot, uint8_t func, uint8_t offset, uint3 uint16_t pci_read16 (uint8_t bus, uint8_t slot, uint8_t func, uint8_t offset) { uint64_t fpci; - uint32_t addr = (uint32_t)((uint32_t)bus << 16) | ((uint32_t)slot << 11) | ((uint32_t)func << 8) | - (offset & 0xFC) | ((uint32_t)0x80000000); + uint32_t addr = (uint32_t)((uint32_t)bus << 16) | + ((uint32_t)slot << 11) | + ((uint32_t)func << 8) | + (offset & 0xFC) | + ((uint32_t)0x80000000); spin_lock (&pci_lock, &fpci); @@ -67,8 +76,11 @@ uint16_t pci_read16 (uint8_t bus, uint8_t slot, uint8_t func, uint8_t offset) { void pci_write16 (uint8_t bus, uint8_t slot, uint8_t func, uint8_t offset, uint16_t value) { uint64_t fpci; - uint32_t addr = (uint32_t)((uint32_t)bus << 16) | ((uint32_t)slot << 11) | ((uint32_t)func << 8) | - (offset & 0xFC) | ((uint32_t)0x80000000); + uint32_t addr = (uint32_t)((uint32_t)bus << 16) | + ((uint32_t)slot << 11) | + ((uint32_t)func << 8) | + (offset & 0xFC) | + ((uint32_t)0x80000000); spin_lock (&pci_lock, &fpci); @@ -81,8 +93,11 @@ void pci_write16 (uint8_t bus, uint8_t slot, uint8_t func, uint8_t offset, uint1 uint8_t pci_read8 (uint8_t bus, uint8_t slot, uint8_t func, uint8_t offset) { uint64_t fpci; - uint32_t addr = (uint32_t)((uint32_t)bus << 16) | ((uint32_t)slot << 11) | ((uint32_t)func << 8) | - (offset & 0xFC) | ((uint32_t)0x80000000); + uint32_t addr = (uint32_t)((uint32_t)bus << 16) | + ((uint32_t)slot << 11) | + ((uint32_t)func << 8) | + (offset & 0xFC) | + ((uint32_t)0x80000000); spin_lock (&pci_lock, &fpci); @@ -97,8 +112,11 @@ uint8_t pci_read8 (uint8_t bus, uint8_t slot, uint8_t func, uint8_t offset) { void pci_write8 (uint8_t bus, uint8_t slot, uint8_t func, uint8_t offset, uint8_t value) { uint64_t fpci; - uint32_t addr = (uint32_t)((uint32_t)bus << 16) | ((uint32_t)slot << 11) | ((uint32_t)func << 8) | - (offset & 0xFC) | ((uint32_t)0x80000000); + uint32_t addr = (uint32_t)((uint32_t)bus << 16) | + ((uint32_t)slot << 11) | + ((uint32_t)func << 8) | + (offset & 0xFC) | + ((uint32_t)0x80000000); spin_lock (&pci_lock, &fpci); diff --git a/kernel/device/storage/idedrv.c b/kernel/device/storage/idedrv.c index a38b315..d09e730 100644 --- a/kernel/device/storage/idedrv.c +++ b/kernel/device/storage/idedrv.c @@ -177,9 +177,10 @@ void ide_probe (uint16_t io, uint16_t ctrl, uint8_t devno, struct ide_probe* pro probe->flags |= IDE_PROBE_LBA48; if ((probe->flags & IDE_PROBE_LBA48)) { - probe->sector_count = - (size_t)((uint64_t)identify_buffer[100] | ((uint64_t)identify_buffer[101] << 16) | - ((uint64_t)identify_buffer[102] << 32) | ((uint64_t)identify_buffer[103] << 48)); + probe->sector_count = (size_t)((uint64_t)identify_buffer[100] | + ((uint64_t)identify_buffer[101] << 16) | + ((uint64_t)identify_buffer[102] << 32) | + ((uint64_t)identify_buffer[103] << 48)); } else { probe->sector_count = (size_t)((uint64_t)identify_buffer[60] | ((uint64_t)identify_buffer[61] << 16)); diff --git a/kernel/device/usb/xhci.c b/kernel/device/usb/xhci.c index b914c58..d6a1fc1 100644 --- a/kernel/device/usb/xhci.c +++ b/kernel/device/usb/xhci.c @@ -58,6 +58,56 @@ #define XHCI_ERSTBA 0x10 #define XHCI_ERDP 0x18 +/* HCCPARAMS1 */ +#define XHCI_HCCPARAMS1_AC64 0 +#define XHCI_HCCPARAMS1_BNC 1 +#define XHCI_HCCPARAMS1_CSZ 2 +#define XHCI_HCCPARAMS1_PPC 3 +#define XHCI_HCCPARAMS1_PIND 4 +#define XHCI_HCCPARAMS1_LHRC 5 +#define XHCI_HCCPARAMS1_LTC 6 +#define XHCI_HCCPARAMS1_NSS 7 +#define XHCI_HCCPARAMS1_PAE 8 +#define XHCI_HCCPARAMS1_SPC 9 +#define XHCI_HCCPARAMS1_SEC 10 +#define XHCI_HCCPARAMS1_CFC 11 +#define XHCI_HCCPARAMS1_MAX_PSA_SIZE 12 +#define XHCI_HCCPARAMS1_XECP 16 + +/* XHCI extended capabilities */ +#define XHCI_XECP_CAP_ID 0 +#define XHCI_XECP_NEXT_PTR 8 + +/* USB legacy support capability */ +#define XHCI_USBLEGSUP_CAP_ID 0 +#define XHCI_USBLEGSUP_NEXT_PTR 8 +#define XHCI_USBLEGSUP_BIOS_SEMA 16 +#define XHCI_USBLEGSUP_OS_SEMA 24 + +/* Supported protocol capability */ +#define XHCI_SUPPROTO_DW0_CAP_ID 0 +#define XHCI_SUPPROTO_DW0_NEXT_PTR 8 +#define XHCI_SUPPROTO_DW0_MINOR_REV 16 +#define XHCI_SUPPROTO_DW0_MAJOR_REV 24 +#define XHCI_SUPPROTO_DW1_NAME_STRING 0 +#define XHCI_SUPPROTO_DW2_PORT_OFF 0 +#define XHCI_SUPPROTO_DW2_PORT_COUNT 8 +#define XHCI_SUPPROTO_DW2_PROT_DEF 16 +#define XHCI_SUPPROTO_DW2_PSIC 28 +#define XHCI_SUPPROTO_DW3_SLOT_TYPE 0 + +/* HCSPARAMS1 */ +#define XHCI_HCSPARAMS1_MAX_DEV_SLOTS 0 +#define XHCI_HCSPARAMS1_MAX_INTRS 8 +#define XHCI_HCSPARAMS1_MAX_PORTS 24 + +/* HCSPARAMS2 */ +#define XHCI_HCSPARAMS2_IST 0 +#define XHCI_HCSPARAMS2_ERST_MAX 4 +#define XHCI_HCSPARAMS2_MAX_SCRTCH_HI 21 +#define XHCI_HCSPARAMS2_SPR 26 +#define XHCI_HCSPARAMS2_MAX_SCRTCH_LO 27 + /* event types */ #define XHCI_TRB_NORMAL 1 #define XHCI_TRB_SETUP_STAGE 2 @@ -93,6 +143,74 @@ #define XHCI_TRB_DEV_NOTIF_EVNT 38 #define XHCI_TRB_MFINDEX_WRAP 39 +/* generic TRB bits */ +#define XHCI_GTRB_TRB_TYPE 10 +#define XHCI_GTRB_CYCLE_BIT 0 + +/* command completion event TRB */ +#define XHCI_CCETRB_CTRL_SLOT_ID 24 +#define XHCI_CCETRB_CTRL_VFID 16 +#define XHCI_CCETRB_CTRL_TRB_TYPE 10 +#define XHCI_CCETRB_CTRL_CYCLEBIT 0 +#define XHCI_CCETRB_STS_CMPL_CODE 24 + +/* transfer event TRB */ +#define XHCI_TETRB_CTRL_SLOT_ID 24 +#define XHCI_TETRB_CTRL_ENDPOINT 16 +#define XHCI_TETRB_CTRL_TRB_TYPE 10 +#define XHCI_TETRB_CTRL_EVT_DATA 2 +#define XHCI_TETRB_CTRL_CYCLEBIT 0 +#define XHCI_TETRB_STS_CMPL_CODE 24 + +/* port status change event TRB */ +#define XHCI_PSCETRB_CTRL_TRB_TYPE 10 +#define XHCI_PSCETRB_CTRL_CYCLEBIT 0 +#define XHCI_PSCETRB_STS_CMPL_CODE 24 +#define XHCI_PSCETRB_PARAM_PORT_ID 24 + +/* link TRB */ +#define XHCI_LNKTRB_CTRL_TRB_TYPE 10 +#define XHCI_LNKTRB_CTRL_IOC 5 +#define XHCI_LNKTRB_CTRL_CH 4 +#define XHCI_LNKTRB_CTRL_TC 1 +#define XHCI_LNKTRB_CTRL_CYCLEBIT 0 +#define XHCI_LNKTRB_STS_INTR_TRGT 22 + +/* setup stage TRB */ +#define XHCI_SSTRB_CTRL_TRT 16 +#define XHCI_SSTRB_CTRL_TRB_TYPE 10 +#define XHCI_SSTRB_CTRL_IDT 6 +#define XHCI_SSTRB_CTRL_IOC 5 +#define XHCI_SSTRB_CTRL_CYCLEBIT 0 +#define XHCI_SSTRB_STS_INTR_TRGT 22 +#define XHCI_SSTRB_PARAM_WLENGTH 48 +#define XHCI_SSTRB_PARAM_WINDEX 32 +#define XHCI_SSTRB_PARAM_WVALUE 16 +#define XHCI_SSTRB_PARAM_BREQUEST 8 +#define XHCI_SSTRB_PARAM_BMREQUEST_TYPE 0 + +/* data stage TRB */ +#define XHCI_DSTRB_CTRL_DIR 16 +#define XHCI_DSTRB_CTRL_TRB_TYPE 10 +#define XHCI_DSTRB_CTRL_IDT 6 +#define XHCI_DSTRB_CTRL_IOC 5 +#define XHCI_DSTRB_CTRL_CH 4 +#define XHCI_DSTRB_CTRL_NS 3 +#define XHCI_DSTRB_CTRL_ISP 2 +#define XHCI_DSTRB_CTRL_ENT 1 +#define XHCI_DSTRB_CTRL_CYCLEBIT 0 +#define XHCI_DSTRB_STS_INTR_TRGT 22 +#define XHCI_DSTRB_STS_TD_SIZE 17 + +/* status stage TRB */ +#define XHCI_STSTRB_CTRL_DIR 16 +#define XHCI_STSTRB_CTRL_TRB_TYPE 10 +#define XHCI_STSTRB_CTRL_IOC 5 +#define XHCI_STSTRB_CTRL_CH 4 +#define XHCI_STSTRB_CTRL_ENT 1 +#define XHCI_STSTRB_CTRL_CYCLEBIT 0 +#define XHCI_STSTRB_STS_INTR_TRGT 22 + /* extended capabilities */ #define XHCI_EXTCAP_USB_LEGACY_SUPPORT 1 #define XHCI_EXTCAP_SUPPORTED_PROTOCOL 2 @@ -104,6 +222,73 @@ #define XHCI_EXTCAP_EXT_MSG_INTR 8 #define XHCI_EXTCAP_VENDOR_DEFINED 9 +/* PORTSC bits */ +#define XHCI_PORTSC_CCS 0 +#define XHCI_PORTSC_PED 1 +#define XHCI_PORTSC_OCA 3 +#define XHCI_PORTSC_PR 4 +#define XHCI_PORTSC_PLS 5 +#define XHCI_PORTSC_PP 9 +#define XHCI_PORTSC_PORTSPEED 10 +#define XHCI_PORTSC_PIC 14 +#define XHCI_PORTSC_LWS 16 +#define XHCI_PORTSC_CSC 17 +#define XHCI_PORTSC_PEC 18 +#define XHCI_PORTSC_WRC 19 +#define XHCI_PORTSC_OCC 20 +#define XHCI_PORTSC_PRC 21 +#define XHCI_PORTSC_PLC 22 +#define XHCI_PORTSC_CEC 23 +#define XHCI_PORTSC_CAS 24 +#define XHCI_PORTSC_WCE 25 +#define XCHI_PORTSC_WDE 26 +#define XHCI_PORTSC_WOE 27 +#define XHCI_PORTSC_DR 30 +#define XHCI_PORTSC_WPR 31 + +/* endpoint context */ +#define XHCI_EPCTX_EP_STATE 0 +#define XHCI_EPCTX_MULT 8 +#define XHCI_EPCTX_MAXPSTRAMS 10 +#define XHCI_EPCTX_LSA 15 +#define XHCI_EPCTX_INTERVAL 16 +#define XHCI_EPCTX_MAX_ESIT_HI 24 +#define XHCI_EPCTX_ERR_COUNT 1 +#define XHCI_EPCTX_EP_TYPE 3 +#define XHCI_EPCTX_HID 7 +#define XHCI_EPCTX_MAX_BURST_SZ 8 +#define XHCI_EPCTX_MAX_PKT_SZ 16 +#define XHCI_EPCTX_DCS 0 +#define XHCI_EPCTX_TR_DQ_PTR 4 +#define XHCI_EPCTX_AVG_TRB_LEN 0 +#define XHCI_EPCTX_MAX_ESIT_LOW 16 + +/* endpoint types */ +#define XHCI_EP_INVALID 0 +#define XHCI_EP_ISOCH_OUT 1 +#define XHCI_EP_BULK_OUT 2 +#define XHCI_EP_INTR_OUT 3 +#define XHCI_EP_CTRL_BI 4 +#define XHCI_EP_ISOCH_IN 5 +#define XHCI_EP_BULK_IN 6 +#define XHCI_EP_INTR_IN 7 + +/* slot context */ +#define XHIC_SLCTX_ROUTE_STR 0 +#define XHCI_SLCTX_SPEED 20 +#define XHCI_SLCTX_MTT 25 +#define XHCI_SLCTX_HUB 26 +#define XHCI_SLCTX_CTX_ENTRIES 27 +#define XHCI_SLCTX_MAXEXITLTNCY 0 +#define XHCI_SLCTX_ROOTHUBPRNUM 16 +#define XHCI_SLCTX_PORT_COUNT 24 +#define XHCI_SLCTX_PRNT_HUB_SLT 0 +#define XHCI_SLCTX_PARENT_PORT 8 +#define XHCI_SLCTX_TT_THINKTIME 16 +#define XHCI_SLCTX_INTR_TARGET 22 +#define XHCI_SLCTX_USB_DEV_ADDR 0 +#define XHCI_SLCTX_SLOT_STATE 27 + /* clang-format on */ static void xhci_write8 (uintptr_t base, uint32_t reg, uint8_t value) { @@ -146,8 +331,8 @@ static void xhci_port_reset (struct xhci* xhci, uint8_t port) { uint32_t portsc = xhci_portsc_read (xhci, port); /* check Port Power */ - if (!(portsc & (1 << 9))) { - portsc |= (1 << 9); + if (!(portsc & (1 << XHCI_PORTSC_PP))) { + portsc |= (1 << XHCI_PORTSC_PP); xhci_portsc_write (xhci, port, portsc); stall_ms (50); @@ -155,27 +340,25 @@ static void xhci_port_reset (struct xhci* xhci, uint8_t port) { portsc = xhci_portsc_read (xhci, port); } - /* connect status change, enable port, port reset change */ - portsc |= (1 << 17) | (1 << 18) | (1 << 21); + portsc |= (1 << XHCI_PORTSC_CSC) | (1 << XHCI_PORTSC_PEC) | (1 << XHCI_PORTSC_PRC); xhci_portsc_write (xhci, port, portsc); if (xhci_port->type == XHCI_PORT_USB3) { - /* warm port reset */ - portsc |= (1 << 31); + portsc |= (1 << XHCI_PORTSC_WPR); } else if (xhci_port->type == XHCI_PORT_USB2) { - /* port reset */ - portsc |= (1 << 4); + portsc |= (1 << XHCI_PORTSC_PR); } xhci_portsc_write (xhci, port, portsc); stall_ms (500); - /* warm port reset change, port reset change , connect status change, port enabled change */ - portsc |= (1 << 21) | (1 << 19) | (1 << 17) | (1 << 18); - /* port enabled */ - portsc &= ~(1 << 1); + portsc |= (1 << XHCI_PORTSC_PRC) | + (1 << XHCI_PORTSC_WRC) | + (1 << XHCI_PORTSC_CSC) | + (1 << XHCI_PORTSC_PEC); + portsc &= ~(1 << XHCI_PORTSC_PED); xhci_portsc_write (xhci, port, portsc); @@ -217,8 +400,8 @@ static void xhci_delete_pdevice (struct xhci* xhci, uint8_t port) { static void xhci_event_dispatch (struct xhci* xhci, struct xhci_trb* event, uint8_t type) { switch (type) { case XHCI_TRB_CMD_CMPL_EVENT: { - uint8_t cmpl_code = (event->status >> 24) & 0xFF; - uint8_t slot_id = (event->ctrl >> 24) & 0xFF; + uint8_t cmpl_code = (event->status >> XHCI_CCETRB_STS_CMPL_CODE) & 0xFF; + uint8_t slot_id = (event->ctrl >> XHCI_CCETRB_CTRL_SLOT_ID) & 0xFF; DEBUG ("cmd completion: code=%u,slot=%u\n", cmpl_code, slot_id); @@ -226,13 +409,13 @@ static void xhci_event_dispatch (struct xhci* xhci, struct xhci_trb* event, uint xhci->last_cmpl_code = cmpl_code; } break; case XHCI_TRB_PORT_STS_CHNG: { - uint8_t port = ((event->param >> 24) & 0xFF) - 1; + uint8_t port = ((event->param >> XHCI_PSCETRB_PARAM_PORT_ID) & 0xFF) - 1; uint32_t portsc = xhci_portsc_read (xhci, port); DEBUG ("Status change on port %u: 0x%08x\n", port, portsc); /* ack. PED + PR */ - portsc &= ~((1 << 1) | (1 << 4)); + portsc &= ~((1 << XHCI_PORTSC_PED) | (1 << XHCI_PORTSC_PR)); xhci_portsc_write (xhci, port, portsc); @@ -242,9 +425,9 @@ static void xhci_event_dispatch (struct xhci* xhci, struct xhci_trb* event, uint list_append (xhci->port_changes, &change->port_changes_link); } break; case XHCI_TRB_TRANSFER_EVENT: { - uint8_t cmpl_code = (event->status >> 24) & 0xFF; - uint8_t slot_id = (event->ctrl >> 24) & 0xFF; - uint8_t endpoint_id = (event->ctrl >> 16) & 0x1F; + uint8_t cmpl_code = (event->status >> XHCI_TETRB_STS_CMPL_CODE) & 0xFF; + uint8_t slot_id = (event->ctrl >> XHCI_TETRB_CTRL_SLOT_ID) & 0xFF; + uint8_t endpoint_id = (event->ctrl >> XHCI_TETRB_CTRL_ENDPOINT) & 0x1F; DEBUG ("transfer completion: code=%u,slot=%u,endpoint_id=%u\n", cmpl_code, slot_id, endpoint_id); @@ -263,13 +446,13 @@ static void xhci_poll_events (struct xhci* xhci) { for (;;) { struct xhci_trb* event = &xhci->event_ring[xhci->event_ring_idx]; - if ((event->ctrl & 0x1) != xhci->event_cycle_bit) { + if ((event->ctrl & (1 << XHCI_GTRB_CYCLE_BIT)) != xhci->event_cycle_bit) { break; } serviced = true; - uint8_t type = (event->ctrl >> 10) & 0x3F; + uint8_t type = (event->ctrl >> XHCI_GTRB_TRB_TYPE) & 0x3F; xhci_event_dispatch (xhci, event, type); @@ -317,7 +500,9 @@ static void xhci_endpoint0_put_trb (struct xhci_pdevice* pdevice, struct xhci_tr struct xhci_trb* link = &pdevice->endpoint0_ring[pdevice->endpoint0_ring_idx]; link->param = pdevice->endpoint0_ring_phys; link->status = 0; - link->ctrl = (XHCI_TRB_LINK << 10) | (1 << 1) | pdevice->endpoint0_cycle_bit; + link->ctrl = (XHCI_TRB_LINK << XHCI_LNKTRB_CTRL_TRB_TYPE) | + (1 << XHCI_LNKTRB_CTRL_TC) | + pdevice->endpoint0_cycle_bit; pdevice->endpoint0_ring_idx = 0; pdevice->endpoint0_cycle_bit ^= 1; @@ -335,8 +520,13 @@ static bool xhci_endpoint0_ctrl_in (struct xhci* xhci, struct xhci_pdevice* pdev uint8_t request_type, uint8_t request, uint16_t value, uint16_t index, uintptr_t data_phys, uint16_t length, uint64_t* lockflags) { - uint64_t setup = ((uint64_t)length << 48) | ((uint64_t)index << 32) | ((uint64_t)value << 16) | - ((uint64_t)request << 8) | ((uint64_t)request_type); + /* clang-format off */ + uint64_t setup = ((uint64_t)length << XHCI_SSTRB_PARAM_WLENGTH) + | ((uint64_t)index << XHCI_SSTRB_PARAM_WINDEX) + | ((uint64_t)value << XHCI_SSTRB_PARAM_WVALUE) + | ((uint64_t)request << XHCI_SSTRB_PARAM_BREQUEST) + | ((uint64_t)request_type << XHCI_SSTRB_PARAM_BMREQUEST_TYPE); + /* clang-format on */ struct xhci_trb trb; @@ -347,21 +537,23 @@ static bool xhci_endpoint0_ctrl_in (struct xhci* xhci, struct xhci_pdevice* pdev memset (&trb, 0, sizeof (trb)); trb.param = setup; trb.status = 8; - trb.ctrl = (XHCI_TRB_SETUP_STAGE << 10) | (1 << 6) | (1 << 4); + trb.ctrl = + (XHCI_TRB_SETUP_STAGE << XHCI_SSTRB_CTRL_TRB_TYPE) | (1 << XHCI_SSTRB_CTRL_IDT) | (1 << 4); xhci_endpoint0_put_trb (pdevice, trb); /* data stage */ memset (&trb, 0, sizeof (trb)); trb.param = data_phys; trb.status = length; - trb.ctrl = (XHCI_TRB_DATA_STAGE << 10) | (1 << 16) | (1 << 4); + trb.ctrl = + (XHCI_TRB_DATA_STAGE << XHCI_DSTRB_CTRL_TRB_TYPE) | (1 << XHCI_DSTRB_CTRL_DIR) | (1 << 4); xhci_endpoint0_put_trb (pdevice, trb); /* status stage */ memset (&trb, 0, sizeof (trb)); trb.param = 0; trb.status = 0; - trb.ctrl = (XHCI_TRB_STATUS_STAGE << 10) | (1 << 5); + trb.ctrl = (XHCI_TRB_STATUS_STAGE << XHCI_STSTRB_CTRL_TRB_TYPE) | (1 << XHCI_STSTRB_CTRL_IOC); xhci_endpoint0_put_trb (pdevice, trb); xhci_write32 (xhci->xhci_doorbell_base, pdevice->slot_id * 4, 1); @@ -390,7 +582,9 @@ static void xhci_send_cmd (struct xhci* xhci, uint64_t param, uint32_t status, u struct xhci_trb* link = &xhci->cmd_ring[xhci->cmd_ring_idx]; link->param = xhci->cmd_ring_phys; link->status = 0; - link->ctrl = (XHCI_TRB_LINK << 10) | (1 << 1) | xhci->cmd_cycle_bit; + link->ctrl = (XHCI_TRB_LINK << XHCI_LNKTRB_CTRL_TRB_TYPE) | + (1 << XHCI_LNKTRB_CTRL_TC) | + xhci->cmd_cycle_bit; xhci->cmd_ring_idx = 0; xhci->cmd_cycle_bit ^= 1; @@ -399,7 +593,7 @@ static void xhci_send_cmd (struct xhci* xhci, uint64_t param, uint32_t status, u struct xhci_trb* trb = &xhci->cmd_ring[xhci->cmd_ring_idx]; trb->param = param; trb->status = status; - trb->ctrl = (ctrl & ~0x1) | xhci->cmd_cycle_bit; + trb->ctrl = (ctrl & ~XHCI_LNKTRB_CTRL_TC) | xhci->cmd_cycle_bit; xhci->cmd_ring_idx++; @@ -428,7 +622,7 @@ static void xhci_send_cmd (struct xhci* xhci, uint64_t param, uint32_t status, u static void xhci_bios_handover (struct xhci* xhci) { uint32_t hccparams1 = xhci_read32 (xhci->xhci_mmio_base, XHCI_HCCPARAMS1); - uint32_t ext_offset = (hccparams1 >> 16) << 2; + uint32_t ext_offset = (hccparams1 >> XHCI_HCCPARAMS1_XECP) << 2; if (ext_offset == 0) return; @@ -440,7 +634,7 @@ static void xhci_bios_handover (struct xhci* xhci) { if (cap_id == XHCI_EXTCAP_USB_LEGACY_SUPPORT) { /* Make or break on real hardware. We need to take over ownership from the BIOS. */ - if (cap & (1 << 16)) { + if (cap & (1 << XHCI_USBLEGSUP_BIOS_SEMA)) { DEBUG ("BIOS owns XHCI, requesting handover!\n"); xhci_write8 (cap_ptr, 3, 1); @@ -449,7 +643,7 @@ static void xhci_bios_handover (struct xhci* xhci) { int timeout = 1000; while (--timeout > 0) { uint32_t val = xhci_read32 (cap_ptr, 0); - if (!(val & (1 << 16)) && (val & (1 << 24))) + if (!(val & (1 << XHCI_USBLEGSUP_BIOS_SEMA)) && (val & (1 << XHCI_USBLEGSUP_OS_SEMA))) break; stall_ms (100); @@ -461,7 +655,7 @@ static void xhci_bios_handover (struct xhci* xhci) { break; } - uint8_t next = (cap >> 8) & 0xFF; + uint8_t next = (cap >> XHCI_XECP_NEXT_PTR) & 0xFF; if (!next) break; @@ -471,7 +665,7 @@ static void xhci_bios_handover (struct xhci* xhci) { static void xhci_reset_ports (struct xhci* xhci) { uint32_t hccparams1 = xhci_read32 (xhci->xhci_mmio_base, XHCI_HCCPARAMS1); - uint32_t ext_offset = (hccparams1 >> 16) << 2; + uint32_t ext_offset = (hccparams1 >> XHCI_HCCPARAMS1_XECP) << 2; if (ext_offset == 0) return; @@ -480,13 +674,14 @@ static void xhci_reset_ports (struct xhci* xhci) { uintptr_t cap_ptr = xhci->xhci_mmio_base + ext_offset; uint32_t cap = xhci_read32 (cap_ptr, 0); uint8_t cap_id = cap & 0xFF; - uint8_t minor = (cap >> 16) & 0xFF; - uint8_t major = (cap >> 24) & 0xFF; if (cap_id == XHCI_EXTCAP_SUPPORTED_PROTOCOL) { + uint8_t minor = (cap >> XHCI_SUPPROTO_DW0_MINOR_REV) & 0xFF; + uint8_t major = (cap >> XHCI_SUPPROTO_DW0_MAJOR_REV) & 0xFF; + uint32_t dword2 = xhci_read32 (cap_ptr, 8); - uint8_t port_off = dword2 & 0xFF; - uint8_t port_count = (dword2 >> 8) & 0xFF; + uint8_t port_off = (dword2 >> XHCI_SUPPROTO_DW2_PORT_OFF) & 0xFF; + uint8_t port_count = (dword2 >> XHCI_SUPPROTO_DW2_PORT_COUNT) & 0xFF; uint8_t first_port = port_off - 1; uint8_t last_port = first_port + port_count - 1; @@ -506,7 +701,7 @@ static void xhci_reset_ports (struct xhci* xhci) { uint32_t portsc = xhci_portsc_read (xhci, port); - if ((portsc & (1 << 0))) { + if ((portsc & (1 << XHCI_PORTSC_CCS))) { DEBUG ("Device connected. resetting\n"); xhci_port_reset (xhci, port); xhci_create_pdevice (xhci, port); @@ -516,7 +711,7 @@ static void xhci_reset_ports (struct xhci* xhci) { } } - uint8_t next = (cap >> 8) & 0xFF; + uint8_t next = (cap >> XHCI_XECP_NEXT_PTR) & 0xFF; if (!next) break; @@ -534,10 +729,10 @@ static void xhci_pdevice_setup_addressing (struct xhci* xhci, struct xhci_pdevic uint32_t portsc = xhci_portsc_read (xhci, pdevice->port_value); - uint32_t speed = (portsc >> 10) & 0x0F; + uint32_t speed = (portsc >> XHCI_PORTSC_PORTSPEED) & 0x0F; xhci->last_cmpl_code = 0; - xhci_send_cmd (xhci, 0, 0, XHCI_TRB_SLOT_ENAB_CMD << 10, lockflags); + xhci_send_cmd (xhci, 0, 0, XHCI_TRB_SLOT_ENAB_CMD << XHCI_GTRB_TRB_TYPE, lockflags); if (xhci->last_cmpl_code != 1) { DEBUG ("Enable slot failed\n"); @@ -571,11 +766,12 @@ static void xhci_pdevice_setup_addressing (struct xhci* xhci, struct xhci_pdevic /* Add slot and endpoint 0 */ ctx64->ctrl.dw[1] = (1 << 0) | (1 << 1); - ctx64->slot.dw[0] = (1 << 27) | (speed << 20); - ctx64->slot.dw[1] = ((pdevice->port_value + 1) << 16); + ctx64->slot.dw[0] = (1 << XHCI_SLCTX_SLOT_STATE) | (speed << XHCI_SLCTX_SPEED); + ctx64->slot.dw[1] = ((pdevice->port_value + 1) << XHCI_SLCTX_ROOTHUBPRNUM); ctx64->endpoints[0].dw[0] = 0; - ctx64->endpoints[0].dw[1] = 3 | (4 << 3) | (max_packet_size << 16); + ctx64->endpoints[0].dw[1] = + 3 | (XHCI_EP_CTRL_BI << XHCI_EPCTX_EP_TYPE) | (max_packet_size << XHCI_EPCTX_MAX_PKT_SZ); ctx64->endpoints[0].dw[2] = (uint32_t)pdevice->endpoint0_ring_phys | (1 << 0); ctx64->endpoints[0].dw[3] = (uint32_t)(pdevice->endpoint0_ring_phys >> 32); } else { @@ -585,16 +781,17 @@ static void xhci_pdevice_setup_addressing (struct xhci* xhci, struct xhci_pdevic ctx32->ctrl.dw[1] = (1 << 0) | (1 << 1); - ctx32->slot.dw[0] = (1 << 27) | (speed << 20); - ctx32->slot.dw[1] = ((pdevice->port_value + 1) << 16); + ctx32->slot.dw[0] = (1 << XHCI_SLCTX_SLOT_STATE) | (speed << XHCI_SLCTX_SPEED); + ctx32->slot.dw[1] = ((pdevice->port_value + 1) << XHCI_SLCTX_ROOTHUBPRNUM); - ctx32->endpoints[0].dw[1] = 3 | (4 << 3) | (max_packet_size << 16); + ctx32->endpoints[0].dw[1] = + 3 | (XHCI_EP_CTRL_BI << XHCI_EPCTX_EP_TYPE) | (max_packet_size << XHCI_EPCTX_MAX_PKT_SZ); ctx32->endpoints[0].dw[2] = (uint32_t)pdevice->endpoint0_ring_phys | (1 << 0); ctx32->endpoints[0].dw[3] = (uint32_t)(pdevice->endpoint0_ring_phys >> 32); } xhci->last_cmpl_code = 0; - uint32_t ctrl = (pdevice->slot_id << 24) | (XHCI_TRB_ADDR_DEV_CMD << 10); + uint32_t ctrl = (pdevice->slot_id << 24) | (XHCI_TRB_ADDR_DEV_CMD << XHCI_GTRB_TRB_TYPE); xhci_send_cmd (xhci, input_ctx_phys, 0, ctrl, lockflags); stall_ms (500); @@ -661,8 +858,8 @@ static void xhci_poll_port_changes (struct xhci* xhci) { list_remove (xhci->port_changes, &change->port_changes_link); - if ((change->portsc & (1 << 17))) { - if ((change->portsc & (1 << 0))) { + if ((change->portsc & (1 << XHCI_PORTSC_CSC))) { + if ((change->portsc & (1 << XHCI_PORTSC_CCS))) { DEBUG ("Device attached to port %u!\n", change->port); xhci_port_reset (xhci, change->port); @@ -718,10 +915,11 @@ DEFINE_DEVICE_INIT (xhci_init) { xhci->xhci_doorbell_base = xhci->xhci_mmio_base + dboff; uint32_t hcsparams2 = xhci_read32 (xhci->xhci_mmio_base, XHCI_HCSPARAMS2); - xhci->max_scratchpad = (((hcsparams2 >> 21) & 0x1F) << 5) | ((hcsparams2 >> 27) & 0x1F); + xhci->max_scratchpad = (((hcsparams2 >> XHCI_HCSPARAMS2_MAX_SCRTCH_HI) & 0x1F) << 5) | + ((hcsparams2 >> XHCI_HCSPARAMS2_MAX_SCRTCH_LO) & 0x1F); uint32_t hccparams1 = xhci_read32 (xhci->xhci_mmio_base, XHCI_HCCPARAMS1); - xhci->xhci_ctx_size = (hccparams1 & (1 << 2)) ? 64 : 32; + xhci->xhci_ctx_size = (hccparams1 & (1 << XHCI_HCCPARAMS1_CSZ)) ? 64 : 32; DEBUG ("starting init sequence\n"); diff --git a/kernel/fs/fat1.c b/kernel/fs/fat1.c index 312d549..edcf3cd 100644 --- a/kernel/fs/fat1.c +++ b/kernel/fs/fat1.c @@ -429,8 +429,10 @@ typedef unsigned int uint32; #define MAX_LONGFILENAME_ENTRIES 20 #define MAX_LFN_ENTRY_LENGTH 13 #define GET_32BIT_WORD(buffer, location) \ - (((uint32)buffer[location + 3] << 24) + ((uint32)buffer[location + 2] << 16) + \ - ((uint32)buffer[location + 1] << 8) + (uint32)buffer[location + 0]) + (((uint32)buffer[location + 3] << 24) + \ + ((uint32)buffer[location + 2] << 16) + \ + ((uint32)buffer[location + 1] << 8) + \ + (uint32)buffer[location + 0]) #define GET_16BIT_WORD(buffer, location) \ (((uint16)buffer[location + 1] << 8) + (uint16)buffer[location + 0]) #define SET_32BIT_WORD(buffer, location, value) \ @@ -514,23 +516,30 @@ int fatfs_entry_lfn_text (struct fat_dir_entry* entry) { return 0; } int fatfs_entry_lfn_invalid (struct fat_dir_entry* entry) { - if ((entry->Name[0] == FILE_HEADER_BLANK) || (entry->Name[0] == FILE_HEADER_DELETED) || - (entry->Attr == FILE_ATTR_VOLUME_ID) || (entry->Attr & FILE_ATTR_SYSHID)) + if ((entry->Name[0] == FILE_HEADER_BLANK) || + (entry->Name[0] == FILE_HEADER_DELETED) || + (entry->Attr == FILE_ATTR_VOLUME_ID) || + (entry->Attr & FILE_ATTR_SYSHID)) return 1; else return 0; } int fatfs_entry_lfn_exists (struct lfn_cache* lfn, struct fat_dir_entry* entry) { - if ((entry->Attr != FILE_ATTR_LFN_TEXT) && (entry->Name[0] != FILE_HEADER_BLANK) && - (entry->Name[0] != FILE_HEADER_DELETED) && (entry->Attr != FILE_ATTR_VOLUME_ID) && - (!(entry->Attr & FILE_ATTR_SYSHID)) && (lfn->no_of_strings)) + if ((entry->Attr != FILE_ATTR_LFN_TEXT) && + (entry->Name[0] != FILE_HEADER_BLANK) && + (entry->Name[0] != FILE_HEADER_DELETED) && + (entry->Attr != FILE_ATTR_VOLUME_ID) && + (!(entry->Attr & FILE_ATTR_SYSHID)) && + (lfn->no_of_strings)) return 1; else return 0; } int fatfs_entry_sfn_only (struct fat_dir_entry* entry) { - if ((entry->Attr != FILE_ATTR_LFN_TEXT) && (entry->Name[0] != FILE_HEADER_BLANK) && - (entry->Name[0] != FILE_HEADER_DELETED) && (entry->Attr != FILE_ATTR_VOLUME_ID) && + if ((entry->Attr != FILE_ATTR_LFN_TEXT) && + (entry->Name[0] != FILE_HEADER_BLANK) && + (entry->Name[0] != FILE_HEADER_DELETED) && + (entry->Attr != FILE_ATTR_VOLUME_ID) && (!(entry->Attr & FILE_ATTR_SYSHID))) return 1; else @@ -1280,7 +1289,8 @@ int fatfs_init (struct fatfs_ctx* ctx, struct fatfs* fs) { total_sectors = GET_32BIT_WORD (fs->currentsector.sector, BPB_TOTSEC32); data_sectors = total_sectors - (GET_16BIT_WORD (fs->currentsector.sector, BPB_RSVDSECCNT) + - (fs->currentsector.sector[BPB_NUMFATS] * FATSz) + root_dir_sectors); + (fs->currentsector.sector[BPB_NUMFATS] * FATSz) + + root_dir_sectors); if (fs->sectors_per_cluster != 0) { count_of_clusters = data_sectors / fs->sectors_per_cluster; if (count_of_clusters < 4085) @@ -1298,7 +1308,8 @@ int fatfs_init (struct fatfs_ctx* ctx, struct fatfs* fs) { } uint32 fatfs_lba_of_cluster (struct fatfs* fs, uint32 Cluster_Number) { if (fs->fat_type == FAT_TYPE_16) - return (fs->cluster_begin_lba + (fs->root_entry_count * 32 / FAT_SECTOR_SIZE) + + return (fs->cluster_begin_lba + + (fs->root_entry_count * 32 / FAT_SECTOR_SIZE) + ((Cluster_Number - 2) * fs->sectors_per_cluster)); else return ((fs->cluster_begin_lba + ((Cluster_Number - 2) * fs->sectors_per_cluster))); diff --git a/kernel/fs/fat1.h b/kernel/fs/fat1.h index a395ee5..531a756 100644 --- a/kernel/fs/fat1.h +++ b/kernel/fs/fat1.h @@ -215,8 +215,10 @@ int fatfs_format_fat32 (struct fatfs_ctx* ctx, struct fatfs* fs, uint32 volume_s #define MAX_LONGFILENAME_ENTRIES 20 #define MAX_LFN_ENTRY_LENGTH 13 #define GET_32BIT_WORD(buffer, location) \ - (((uint32)buffer[location + 3] << 24) + ((uint32)buffer[location + 2] << 16) + \ - ((uint32)buffer[location + 1] << 8) + (uint32)buffer[location + 0]) + (((uint32)buffer[location + 3] << 24) + \ + ((uint32)buffer[location + 2] << 16) + \ + ((uint32)buffer[location + 1] << 8) + \ + (uint32)buffer[location + 0]) #define GET_16BIT_WORD(buffer, location) \ (((uint16)buffer[location + 1] << 8) + (uint16)buffer[location + 0]) #define SET_32BIT_WORD(buffer, location, value) \ diff --git a/kernel/libk/endianess.h b/kernel/libk/endianess.h new file mode 100644 index 0000000..0e1fcbb --- /dev/null +++ b/kernel/libk/endianess.h @@ -0,0 +1,6 @@ +#ifndef _KERNEL_LIBK_ENDIANESS_H +#define _KERNEL_LIBK_ENDIANESS_H + +#define BE2LE16(x) (((x) << 8) | (((x) >> 8))) + +#endif // _KERNEL_LIBK_ENDIANESS_H diff --git a/kernel/lz4/xxhash.c b/kernel/lz4/xxhash.c index 31e8660..d001923 100644 --- a/kernel/lz4/xxhash.c +++ b/kernel/lz4/xxhash.c @@ -50,13 +50,20 @@ */ #ifndef XXH_FORCE_MEMORY_ACCESS /* can be defined externally, on command line for example */ #if defined(__GNUC__) && \ - (defined(__ARM_ARCH_6__) || defined(__ARM_ARCH_6J__) || defined(__ARM_ARCH_6K__) || \ - defined(__ARM_ARCH_6Z__) || defined(__ARM_ARCH_6ZK__) || defined(__ARM_ARCH_6T2__)) + (defined(__ARM_ARCH_6__) || \ + defined(__ARM_ARCH_6J__) || \ + defined(__ARM_ARCH_6K__) || \ + defined(__ARM_ARCH_6Z__) || \ + defined(__ARM_ARCH_6ZK__) || \ + defined(__ARM_ARCH_6T2__)) #define XXH_FORCE_MEMORY_ACCESS 2 #elif (defined(__INTEL_COMPILER) && !defined(_WIN32)) || \ (defined(__GNUC__) && \ - (defined(__ARM_ARCH_7__) || defined(__ARM_ARCH_7A__) || defined(__ARM_ARCH_7R__) || \ - defined(__ARM_ARCH_7M__) || defined(__ARM_ARCH_7S__))) + (defined(__ARM_ARCH_7__) || \ + defined(__ARM_ARCH_7A__) || \ + defined(__ARM_ARCH_7R__) || \ + defined(__ARM_ARCH_7M__) || \ + defined(__ARM_ARCH_7S__))) #define XXH_FORCE_MEMORY_ACCESS 1 #endif #endif @@ -204,7 +211,9 @@ static U32 XXH_read32 (const void* memPtr) { #define XXH_swap32 __builtin_bswap32 #else static U32 XXH_swap32 (U32 x) { - return ((x << 24) & 0xff000000) | ((x << 8) & 0x00ff0000) | ((x >> 8) & 0x0000ff00) | + return ((x << 24) & 0xff000000) | + ((x << 8) & 0x00ff0000) | + ((x >> 8) & 0x0000ff00) | ((x >> 24) & 0x000000ff); } #endif @@ -536,7 +545,9 @@ FORCE_INLINE U32 XXH32_digest_endian (const XXH32_state_t* state, XXH_endianness U32 h32; if (state->large_len) { - h32 = XXH_rotl32 (state->v1, 1) + XXH_rotl32 (state->v2, 7) + XXH_rotl32 (state->v3, 12) + + h32 = XXH_rotl32 (state->v1, 1) + + XXH_rotl32 (state->v2, 7) + + XXH_rotl32 (state->v3, 12) + XXH_rotl32 (state->v4, 18); } else { h32 = state->v3 /* == seed */ + PRIME32_5; @@ -634,10 +645,14 @@ static U64 XXH_read64 (const void* memPtr) { #define XXH_swap64 __builtin_bswap64 #else static U64 XXH_swap64 (U64 x) { - return ((x << 56) & 0xff00000000000000ULL) | ((x << 40) & 0x00ff000000000000ULL) | - ((x << 24) & 0x0000ff0000000000ULL) | ((x << 8) & 0x000000ff00000000ULL) | - ((x >> 8) & 0x00000000ff000000ULL) | ((x >> 24) & 0x0000000000ff0000ULL) | - ((x >> 40) & 0x000000000000ff00ULL) | ((x >> 56) & 0x00000000000000ffULL); + return ((x << 56) & 0xff00000000000000ULL) | + ((x << 40) & 0x00ff000000000000ULL) | + ((x << 24) & 0x0000ff0000000000ULL) | + ((x << 8) & 0x000000ff00000000ULL) | + ((x >> 8) & 0x00000000ff000000ULL) | + ((x >> 24) & 0x0000000000ff0000ULL) | + ((x >> 40) & 0x000000000000ff00ULL) | + ((x >> 56) & 0x00000000000000ffULL); } #endif diff --git a/libaux/path.c b/libaux/path.c index 2d66be2..3f1849e 100644 --- a/libaux/path.c +++ b/libaux/path.c @@ -3,8 +3,13 @@ #include bool path_validate_char (char ch) { - return ((ch >= '0' && ch <= '9') || (ch >= 'a' && ch <= 'z') || (ch >= 'A' && ch <= 'Z') || - (ch == '_') || (ch == '-') || (ch == '/') || (ch == '.')); + return ((ch >= '0' && ch <= '9') || + (ch >= 'a' && ch <= 'z') || + (ch >= 'A' && ch <= 'Z') || + (ch == '_') || + (ch == '-') || + (ch == '/') || + (ch == '.')); } bool path_validate (const char* path) { diff --git a/libaux/printf.c b/libaux/printf.c index 22f020f..e858736 100644 --- a/libaux/printf.c +++ b/libaux/printf.c @@ -567,7 +567,8 @@ static void print_integer_finalization (output_gadget_t* output, char* buf, prin } if ((base == BASE_HEX) && !(flags & FLAGS_UPPERCASE) && (len < PRINTF_INTEGER_BUFFER_SIZE)) { buf[len++] = 'x'; - } else if ((base == BASE_HEX) && (flags & FLAGS_UPPERCASE) && + } else if ((base == BASE_HEX) && + (flags & FLAGS_UPPERCASE) && (len < PRINTF_INTEGER_BUFFER_SIZE)) { buf[len++] = 'X'; } else if ((base == BASE_BINARY) && (len < PRINTF_INTEGER_BUFFER_SIZE)) { @@ -955,18 +956,22 @@ static floating_point_t log10_of_positive (floating_point_t positive_number) { return ( /* Taylor expansion around 1.5: */ (floating_point_t)0.1760912590556812420 /* Expansion term 0: ln(1.5) / ln(10) */ - + z * (floating_point_t)0.2895296546021678851 /* Expansion term 1: (M - 1.5) * 2/3 / ln(10) - */ + + + z * (floating_point_t)0.2895296546021678851 /* Expansion term 1: (M - 1.5) * 2/3 / ln(10) + */ #if PRINTF_LOG10_TAYLOR_TERMS > 2 - - z * z * (floating_point_t)0.0965098848673892950 /* Expansion term 2: (M - 1.5)^2 * 2/9 / - ln(10) */ + - + z * z * (floating_point_t)0.0965098848673892950 /* Expansion term 2: (M - 1.5)^2 * 2/9 / + ln(10) */ #if PRINTF_LOG10_TAYLOR_TERMS > 3 - + z * z * z * (floating_point_t)0.0428932821632841311 /* Expansion term 2: (M - 1.5)^3 * 8/81 - / ln(10) */ + + + z * z * z * (floating_point_t)0.0428932821632841311 /* Expansion term 2: (M - 1.5)^3 * 8/81 + / ln(10) */ #endif #endif /* exact log_2 of the exponent x, with logarithm base change */ - + (floating_point_t)exp2 * + + + (floating_point_t)exp2 * (floating_point_t)0.30102999566398119521 /* = exp2 * log_10(2) = exp2 * ln(2)/ln(10) */ ); } @@ -1099,7 +1104,8 @@ static void print_exponential_number (output_gadget_t* output, floating_point_t /* Redo some work :-) */ floored_exp10 = original_floored_exp10; decimal_part_components = get_components (SIGN (negative, abs_number), precision); - if ((flags & FLAGS_ADAPT_EXP) && floored_exp10 >= -1 && + if ((flags & FLAGS_ADAPT_EXP) && + floored_exp10 >= -1 && decimal_part_components.integral == powers_of_10[floored_exp10 + 1]) { floored_exp10++; /* Not strictly necessary, since floored_exp10 is no longer really used */ if (precision > 0U) { diff --git a/libfat/_fat.c b/libfat/_fat.c index c931463..d3c36a5 100644 --- a/libfat/_fat.c +++ b/libfat/_fat.c @@ -426,8 +426,10 @@ typedef unsigned int uint32; #define MAX_LONGFILENAME_ENTRIES 20 #define MAX_LFN_ENTRY_LENGTH 13 #define GET_32BIT_WORD(buffer, location) \ - (((uint32)buffer[location + 3] << 24) + ((uint32)buffer[location + 2] << 16) + \ - ((uint32)buffer[location + 1] << 8) + (uint32)buffer[location + 0]) + (((uint32)buffer[location + 3] << 24) + \ + ((uint32)buffer[location + 2] << 16) + \ + ((uint32)buffer[location + 1] << 8) + \ + (uint32)buffer[location + 0]) #define GET_16BIT_WORD(buffer, location) \ (((uint16)buffer[location + 1] << 8) + (uint16)buffer[location + 0]) #define SET_32BIT_WORD(buffer, location, value) \ @@ -511,23 +513,30 @@ int fatfs_entry_lfn_text (struct fat_dir_entry* entry) { return 0; } int fatfs_entry_lfn_invalid (struct fat_dir_entry* entry) { - if ((entry->Name[0] == FILE_HEADER_BLANK) || (entry->Name[0] == FILE_HEADER_DELETED) || - (entry->Attr == FILE_ATTR_VOLUME_ID) || (entry->Attr & FILE_ATTR_SYSHID)) + if ((entry->Name[0] == FILE_HEADER_BLANK) || + (entry->Name[0] == FILE_HEADER_DELETED) || + (entry->Attr == FILE_ATTR_VOLUME_ID) || + (entry->Attr & FILE_ATTR_SYSHID)) return 1; else return 0; } int fatfs_entry_lfn_exists (struct lfn_cache* lfn, struct fat_dir_entry* entry) { - if ((entry->Attr != FILE_ATTR_LFN_TEXT) && (entry->Name[0] != FILE_HEADER_BLANK) && - (entry->Name[0] != FILE_HEADER_DELETED) && (entry->Attr != FILE_ATTR_VOLUME_ID) && - (!(entry->Attr & FILE_ATTR_SYSHID)) && (lfn->no_of_strings)) + if ((entry->Attr != FILE_ATTR_LFN_TEXT) && + (entry->Name[0] != FILE_HEADER_BLANK) && + (entry->Name[0] != FILE_HEADER_DELETED) && + (entry->Attr != FILE_ATTR_VOLUME_ID) && + (!(entry->Attr & FILE_ATTR_SYSHID)) && + (lfn->no_of_strings)) return 1; else return 0; } int fatfs_entry_sfn_only (struct fat_dir_entry* entry) { - if ((entry->Attr != FILE_ATTR_LFN_TEXT) && (entry->Name[0] != FILE_HEADER_BLANK) && - (entry->Name[0] != FILE_HEADER_DELETED) && (entry->Attr != FILE_ATTR_VOLUME_ID) && + if ((entry->Attr != FILE_ATTR_LFN_TEXT) && + (entry->Name[0] != FILE_HEADER_BLANK) && + (entry->Name[0] != FILE_HEADER_DELETED) && + (entry->Attr != FILE_ATTR_VOLUME_ID) && (!(entry->Attr & FILE_ATTR_SYSHID))) return 1; else @@ -1278,7 +1287,8 @@ int fatfs_init (struct fatfs_ctx* ctx, struct fatfs* fs) { total_sectors = GET_32BIT_WORD (fs->currentsector.sector, BPB_TOTSEC32); data_sectors = total_sectors - (GET_16BIT_WORD (fs->currentsector.sector, BPB_RSVDSECCNT) + - (fs->currentsector.sector[BPB_NUMFATS] * FATSz) + root_dir_sectors); + (fs->currentsector.sector[BPB_NUMFATS] * FATSz) + + root_dir_sectors); if (fs->sectors_per_cluster != 0) { count_of_clusters = data_sectors / fs->sectors_per_cluster; if (count_of_clusters < 4085) @@ -1296,7 +1306,8 @@ int fatfs_init (struct fatfs_ctx* ctx, struct fatfs* fs) { } uint32 fatfs_lba_of_cluster (struct fatfs* fs, uint32 Cluster_Number) { if (fs->fat_type == FAT_TYPE_16) - return (fs->cluster_begin_lba + (fs->root_entry_count * 32 / FAT_SECTOR_SIZE) + + return (fs->cluster_begin_lba + + (fs->root_entry_count * 32 / FAT_SECTOR_SIZE) + ((Cluster_Number - 2) * fs->sectors_per_cluster)); else return ((fs->cluster_begin_lba + ((Cluster_Number - 2) * fs->sectors_per_cluster))); diff --git a/libfat/_fat.h b/libfat/_fat.h index a395ee5..531a756 100644 --- a/libfat/_fat.h +++ b/libfat/_fat.h @@ -215,8 +215,10 @@ int fatfs_format_fat32 (struct fatfs_ctx* ctx, struct fatfs* fs, uint32 volume_s #define MAX_LONGFILENAME_ENTRIES 20 #define MAX_LFN_ENTRY_LENGTH 13 #define GET_32BIT_WORD(buffer, location) \ - (((uint32)buffer[location + 3] << 24) + ((uint32)buffer[location + 2] << 16) + \ - ((uint32)buffer[location + 1] << 8) + (uint32)buffer[location + 0]) + (((uint32)buffer[location + 3] << 24) + \ + ((uint32)buffer[location + 2] << 16) + \ + ((uint32)buffer[location + 1] << 8) + \ + (uint32)buffer[location + 0]) #define GET_16BIT_WORD(buffer, location) \ (((uint16)buffer[location + 1] << 8) + (uint16)buffer[location + 0]) #define SET_32BIT_WORD(buffer, location, value) \