summaryrefslogtreecommitdiffstats
path: root/include/writeprotect.h
diff options
context:
space:
mode:
Diffstat (limited to 'include/writeprotect.h')
-rw-r--r--include/writeprotect.h98
1 files changed, 98 insertions, 0 deletions
diff --git a/include/writeprotect.h b/include/writeprotect.h
new file mode 100644
index 000000000..7ceed0792
--- /dev/null
+++ b/include/writeprotect.h
@@ -0,0 +1,98 @@
+/*
+ * This file is part of the flashrom project.
+ *
+ * Copyright (C) 2010 Google Inc.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ */
+
+#ifndef __WRITEPROTECT_H__
+#define __WRITEPROTECT_H__ 1
+
+#include <stdint.h>
+#include <stdbool.h>
+#include <stddef.h>
+
+#include "libflashrom.h"
+
+#define MAX_BP_BITS 4
+
+/* Chip protection range: start address and length. */
+struct wp_range {
+ size_t start, len;
+};
+
+/* Generic description of a chip's write protection configuration. */
+struct flashrom_wp_cfg {
+ enum flashrom_wp_mode mode;
+ struct wp_range range;
+};
+
+/* Collection of multiple write protection ranges. */
+struct flashrom_wp_ranges {
+ struct wp_range *ranges;
+ size_t count;
+};
+
+/*
+ * Description of a chip's write protection configuration.
+ *
+ * It allows most WP code to store and manipulate a chip's configuration
+ * without knowing the exact layout of bits in the chip's status registers.
+ */
+struct wp_bits {
+ /* Status register protection bit (SRP) */
+ bool srp_bit_present;
+ uint8_t srp;
+
+ /* Status register lock bit (SRL) */
+ bool srl_bit_present;
+ uint8_t srl;
+
+ /* Complement bit (CMP) */
+ bool cmp_bit_present;
+ uint8_t cmp;
+
+ /* Sector/block protection bit (SEC) */
+ bool sec_bit_present;
+ uint8_t sec;
+
+ /* Top/bottom protection bit (TB) */
+ bool tb_bit_present;
+ uint8_t tb;
+
+ /* Block protection bits (BP) */
+ size_t bp_bit_count;
+ uint8_t bp[MAX_BP_BITS];
+};
+
+struct flashrom_flashctx;
+
+/* Write WP configuration to the chip */
+enum flashrom_wp_result wp_write_cfg(struct flashrom_flashctx *, const struct flashrom_wp_cfg *);
+
+/* Read WP configuration from the chip */
+enum flashrom_wp_result wp_read_cfg(struct flashrom_wp_cfg *, struct flashrom_flashctx *);
+
+/* Get a list of protection ranges supported by the chip */
+enum flashrom_wp_result wp_get_available_ranges(struct flashrom_wp_ranges **, struct flashrom_flashctx *);
+
+/* Checks if writeprotect functions can be used with the current flash/programmer */
+bool wp_operations_available(struct flashrom_flashctx *);
+
+/*
+ * Converts a writeprotect config to register values and masks that indicate which register bits affect WP state.
+ * reg_values, bit_masks, and write_masks must all have length of at least MAX_REGISTERS.
+ */
+enum flashrom_wp_result wp_cfg_to_reg_values(uint8_t *reg_values, uint8_t *bit_masks, uint8_t *write_masks, struct flashrom_flashctx *, const struct flashrom_wp_cfg *);
+
+#endif /* !__WRITEPROTECT_H__ */