coreboot
coreboot is an Open Source project aimed at replacing the proprietary BIOS found in most computers.
cros_camera.c
Go to the documentation of this file.
1 /* SPDX-License-Identifier: GPL-2.0-only */
2 
3 #include <console/console.h>
4 #include <crc_byte.h>
5 #include <string.h>
6 
7 #include "cros_camera.h"
8 
10 {
11  if (memcmp(info->magic, CROS_CAMERA_INFO_MAGIC, sizeof(info->magic))) {
12  printk(BIOS_ERR, "Invalid magic in camera info\n");
13  return -1;
14  }
15 
16  const uint8_t *ptr = (void *)(&info->crc16 + 1);
17  uint16_t crc16 = 0;
18  while (ptr < (uint8_t *)info + sizeof(struct cros_camera_info))
19  crc16 = crc16_byte(crc16, *ptr++);
20 
21  if (info->crc16 != crc16) {
22  printk(BIOS_ERR, "Incorrect CRC16: expected %#06x, got %#06x\n",
23  crc16, info->crc16);
24  return -1;
25  }
26 
27  if (info->version != CROS_CAMERA_INFO_VERSION) {
28  printk(BIOS_ERR, "Unknown camera info version: %u\n",
29  info->version);
30  return -1;
31  }
32  if (info->size < CROS_CAMERA_INFO_SIZE_MIN) {
33  printk(BIOS_ERR, "Size of camera info is too small: %u\n",
34  info->size);
35  return -1;
36  }
37 
38  return 0;
39 }
#define printk(level,...)
Definition: stdlib.h:16
uint16_t crc16_byte(uint16_t prev_crc, uint8_t data)
Definition: crc_byte.c:17
int check_cros_camera_info(const struct cros_camera_info *info)
Definition: cros_camera.c:9
#define CROS_CAMERA_INFO_SIZE_MIN
Definition: cros_camera.h:10
#define CROS_CAMERA_INFO_VERSION
Definition: cros_camera.h:9
#define CROS_CAMERA_INFO_MAGIC
Definition: cros_camera.h:8
static struct smmstore_params_info info
Definition: ramstage.c:12
#define BIOS_ERR
BIOS_ERR - System in incomplete state.
Definition: loglevel.h:72
unsigned short uint16_t
Definition: stdint.h:11
unsigned char uint8_t
Definition: stdint.h:8
int memcmp(const void *s1, const void *s2, size_t n)
Definition: memcmp.c:3
uint16_t crc16
Definition: cros_camera.h:14