cachepc-linux

Fork of AMDESE/linux with modifications for CachePC side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-linux
Log | Files | Refs | README | LICENSE | sfeed.txt

hdmi.c (1786B)


      1// SPDX-License-Identifier: MIT
      2#include "hdmi.h"
      3
      4void pack_hdmi_infoframe(struct packed_hdmi_infoframe *packed_frame,
      5			 u8 *raw_frame, ssize_t len)
      6{
      7	u32 header = 0;
      8	u32 subpack0_low = 0;
      9	u32 subpack0_high = 0;
     10	u32 subpack1_low = 0;
     11	u32 subpack1_high = 0;
     12
     13	switch (len) {
     14		/*
     15		 * "When in doubt, use brute force."
     16		 *     -- Ken Thompson.
     17		 */
     18	default:
     19		/*
     20		 * We presume that no valid frame is longer than 17
     21		 * octets, including header...  And truncate to that
     22		 * if it's longer.
     23		 */
     24	case 17:
     25		subpack1_high = (raw_frame[16] << 16);
     26		fallthrough;
     27	case 16:
     28		subpack1_high |= (raw_frame[15] << 8);
     29		fallthrough;
     30	case 15:
     31		subpack1_high |= raw_frame[14];
     32		fallthrough;
     33	case 14:
     34		subpack1_low = (raw_frame[13] << 24);
     35		fallthrough;
     36	case 13:
     37		subpack1_low |= (raw_frame[12] << 16);
     38		fallthrough;
     39	case 12:
     40		subpack1_low |= (raw_frame[11] << 8);
     41		fallthrough;
     42	case 11:
     43		subpack1_low |= raw_frame[10];
     44		fallthrough;
     45	case 10:
     46		subpack0_high = (raw_frame[9] << 16);
     47		fallthrough;
     48	case 9:
     49		subpack0_high |= (raw_frame[8] << 8);
     50		fallthrough;
     51	case 8:
     52		subpack0_high |= raw_frame[7];
     53		fallthrough;
     54	case 7:
     55		subpack0_low = (raw_frame[6] << 24);
     56		fallthrough;
     57	case 6:
     58		subpack0_low |= (raw_frame[5] << 16);
     59		fallthrough;
     60	case 5:
     61		subpack0_low |= (raw_frame[4] << 8);
     62		fallthrough;
     63	case 4:
     64		subpack0_low |= raw_frame[3];
     65		fallthrough;
     66	case 3:
     67		header = (raw_frame[2] << 16);
     68		fallthrough;
     69	case 2:
     70		header |= (raw_frame[1] << 8);
     71		fallthrough;
     72	case 1:
     73		header |= raw_frame[0];
     74		fallthrough;
     75	case 0:
     76		break;
     77	}
     78
     79	packed_frame->header = header;
     80	packed_frame->subpack0_low = subpack0_low;
     81	packed_frame->subpack0_high = subpack0_high;
     82	packed_frame->subpack1_low = subpack1_low;
     83	packed_frame->subpack1_high = subpack1_high;
     84}