user: What would the C source look like for the assembly code provided here?

```asm
<print_transport_type>:
  endbr64
  push   %r13
  push   %r12
  push   %rbp
  mov    0x378(%rdi),%ebp
  test   %ebp,%ebp
  je     L229
  cmp    $0xffff,%ebp
  je     L229
  mov    0x37c(%rdi),%r13d
  xor    %eax,%eax
  lea    D134(%rip),%rsi
  mov    %ebp,%r12d
  lea    D76(%rip),%rdi
  call   <printf@plt>
  sar    $0xc,%r12d
  je     L101
  cmp    $0x1,%r12d
  je     L177
  mov    %ebp,%esi
  lea    D131(%rip),%rdi
  xor    %eax,%eax
  call   <printf@plt>
L24:
  test   %r13d,%r13d
  je     L75
  cmp    $0xffff,%r13d
  jne    L2
L75:
  mov    $0xa,%edi
  call   <putchar@plt>
L126:
  mov    %r12d,%eax
  pop    %rbp
  pop    %r12
  pop    %r13
  ret
  nop
L229:
  xor    %r12d,%r12d
  pop    %rbp
  mov    %r12d,%eax
  pop    %r12
  pop    %r13
  ret
  nopl   0x0(%rax)
L2:
  xor    %eax,%eax
  lea    D102(%rip),%rdi
  call   <printf@plt>
  cmp    $0x21,%r13d
  je     L107
  mov    %r13d,%esi
  lea    D131(%rip),%rdi
  xor    %eax,%eax
  call   <printf@plt>
  mov    $0xa,%edi
  call   <putchar@plt>
  jmp    L126
  nopl   (%rax)
L101:
  xor    %eax,%eax
  lea    D136(%rip),%rdi
  call   <printf@plt>
  and    $0x1,%ebp
  je     L24
  lea    D48(%rip),%rdi
  xor    %eax,%eax
  call   <printf@plt>
  jmp    L24
  xchg   %ax,%ax
L177:
  xor    %eax,%eax
  lea    D86(%rip),%rdi
  call   <printf@plt>
  test   $0x2f,%bpl
  je     L24
  test   $0x1,%bpl
  jne    L124
L176:
  test   $0x2,%bpl
  jne    L191
L91:
  test   $0x4,%bpl
  jne    L84
L234:
  test   $0x8,%bpl
  jne    L54
L135:
  test   $0x10,%bpl
  jne    L104
L6:
  and    $0x20,%ebp
  je     L24
  lea    D112(%rip),%rdi
  xor    %eax,%eax
  call   <printf@plt>
  jmp    L24
  nopw   0x0(%rax,%rax,1)
L107:
  lea    D145(%rip),%rdi
  xor    %eax,%eax
  call   <printf@plt>
  jmp    L75
  nopl   0x0(%rax,%rax,1)
L104:
  lea    D77(%rip),%rdi
  xor    %eax,%eax
  call   <printf@plt>
  jmp    L6
  nopl   0x0(%rax,%rax,1)
L54:
  lea    D31(%rip),%rdi
  xor    %eax,%eax
  call   <printf@plt>
  jmp    L135
L84:
  lea    D25(%rip),%rdi
  xor    %eax,%eax
  call   <printf@plt>
  jmp    L234
  nopl   0x0(%rax,%rax,1)
L191:
  lea    D5(%rip),%rdi
  xor    %eax,%eax
  call   <printf@plt>
  jmp    L91
  nopl   0x0(%rax,%rax,1)
L124:
  lea    D75(%rip),%rdi
  xor    %eax,%eax
  call   <printf@plt>
  jmp    L176
```

tool_calls: name: parse_data
arguments: label: D134
type_infered: string
name: parse_data
arguments: label: D76
type_infered: string
name: parse_data
arguments: label: D131
type_infered: string
name: parse_data
arguments: label: D102
type_infered: string
name: parse_data
arguments: label: D136
type_infered: string
name: parse_data
arguments: label: D48
type_infered: string
name: parse_data
arguments: label: D86
type_infered: string
name: parse_data
arguments: label: D112
type_infered: string
name: parse_data
arguments: label: D145
type_infered: string
name: parse_data
arguments: label: D77
type_infered: string
name: parse_data
arguments: label: D31
type_infered: string
name: parse_data
arguments: label: D25
type_infered: string
name: parse_data
arguments: label: D5
type_infered: string
name: parse_data
arguments: label: D75
type_infered: string

tool: D134: Transport:

tool: D76: 	%-20s

tool: D131: 0x%04x

tool: D102: ; Revision: 

tool: D136: Parallel

tool: D48: , ATA8-APT

tool: D86: Serial

tool: D112: , SATA Rev 3.0

tool: D145: ATA8-AST T13 Project D1697 Revision 0b

tool: D77: , SATA Rev 2.6

tool: D31: , SATA Rev 2.5

tool: D25: , SATA II Extensions

tool: D5: , SATA 1.0a

tool: D75: , ATA8-AST

assistant: ```c
int print_transport_type(__u16 val[]) {
  __u16 major = val[222], minor = val[223];
  unsigned int ttype, subtype, transport = 0;
  if (major == 0x0000 || major == 0xffff) {
    return transport;
  }
  printf("\t%-20s", "Transport:");
  ttype = major >> 12;
  subtype = major & 0xfff;
  transport = ttype;
  switch (ttype) {
  case 0:
    printf("Parallel");
    if (subtype & 1)
      printf(", ATA8-APT");
    break;
  case 1:
    printf("Serial");
    if (subtype & 0x2f) {
      if (subtype & (1 << 0))
        printf(", ATA8-AST");
      if (subtype & (1 << 1))
        printf(", SATA 1.0a");
      if (subtype & (1 << 2))
        printf(", SATA II Extensions");
      if (subtype & (1 << 3))
        printf(", SATA Rev 2.5");
      if (subtype & (1 << 4))
        printf(", SATA Rev 2.6");
      if (subtype & (1 << 5))
        printf(", SATA Rev 3.0");
    }
    break;
  default:
    printf("0x%04x", major);
    break;
  }
  if (minor != 0x0000 && minor != 0xffff) {
    printf("; Revision: ");
    switch (minor) {
    case 0x21:
      printf("ATA8-AST T13 Project D1697 Revision 0b");
      break;
    default:
      printf("0x%04x", minor);
    }
  }
  putchar('\n');
  return transport;
}
```