sync
This commit is contained in:
parent
25f3a6cfac
commit
bfc16459ac
|
@ -1,4 +1,4 @@
|
|||
/* $OpenBSD: bn.h,v 1.71 2023/04/27 06:48:47 tb Exp $ */
|
||||
/* $OpenBSD: bn.h,v 1.72 2023/06/13 09:12:22 tb Exp $ */
|
||||
/* Copyright (C) 1995-1997 Eric Young (eay@cryptsoft.com)
|
||||
* All rights reserved.
|
||||
*
|
||||
|
@ -547,6 +547,7 @@ void ERR_load_BN_strings(void);
|
|||
#define BN_R_ENCODING_ERROR 104
|
||||
#define BN_R_EXPAND_ON_STATIC_BIGNUM_DATA 105
|
||||
#define BN_R_INPUT_NOT_REDUCED 110
|
||||
#define BN_R_INVALID_ARGUMENT 118
|
||||
#define BN_R_INVALID_LENGTH 106
|
||||
#define BN_R_INVALID_RANGE 115
|
||||
#define BN_R_NOT_A_SQUARE 111
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
/* $OpenBSD: bn_err.c,v 1.15 2022/07/12 14:42:48 kn Exp $ */
|
||||
/* $OpenBSD: bn_err.c,v 1.16 2023/06/13 09:12:22 tb Exp $ */
|
||||
/* ====================================================================
|
||||
* Copyright (c) 1999-2007 The OpenSSL Project. All rights reserved.
|
||||
*
|
||||
|
@ -80,6 +80,7 @@ static ERR_STRING_DATA BN_str_reasons[]= {
|
|||
{ERR_REASON(BN_R_ENCODING_ERROR) , "encoding error"},
|
||||
{ERR_REASON(BN_R_EXPAND_ON_STATIC_BIGNUM_DATA), "expand on static bignum data"},
|
||||
{ERR_REASON(BN_R_INPUT_NOT_REDUCED) , "input not reduced"},
|
||||
{ERR_REASON(BN_R_INVALID_ARGUMENT) , "invalid argument"},
|
||||
{ERR_REASON(BN_R_INVALID_LENGTH) , "invalid length"},
|
||||
{ERR_REASON(BN_R_INVALID_RANGE) , "invalid range"},
|
||||
{ERR_REASON(BN_R_NOT_A_SQUARE) , "not a square"},
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
/* $OpenBSD: bn_mod.c,v 1.20 2023/03/27 10:21:23 tb Exp $ */
|
||||
/* $OpenBSD: bn_mod.c,v 1.21 2023/06/13 09:28:13 tb Exp $ */
|
||||
/* Includes code written by Lenka Fibikova <fibikova@exp-math.uni-essen.de>
|
||||
* for the OpenSSL project. */
|
||||
/* ====================================================================
|
||||
|
@ -136,6 +136,10 @@ BN_mod_nonct(BIGNUM *r, const BIGNUM *a, const BIGNUM *m, BN_CTX *ctx)
|
|||
int
|
||||
BN_nnmod(BIGNUM *r, const BIGNUM *a, const BIGNUM *m, BN_CTX *ctx)
|
||||
{
|
||||
if (r == m) {
|
||||
BNerror(BN_R_INVALID_ARGUMENT);
|
||||
return 0;
|
||||
}
|
||||
if (!BN_mod_ct(r, a, m, ctx))
|
||||
return 0;
|
||||
if (BN_is_negative(r))
|
||||
|
@ -147,6 +151,10 @@ int
|
|||
BN_mod_add(BIGNUM *r, const BIGNUM *a, const BIGNUM *b, const BIGNUM *m,
|
||||
BN_CTX *ctx)
|
||||
{
|
||||
if (r == m) {
|
||||
BNerror(BN_R_INVALID_ARGUMENT);
|
||||
return 0;
|
||||
}
|
||||
if (!BN_add(r, a, b))
|
||||
return 0;
|
||||
return BN_nnmod(r, r, m, ctx);
|
||||
|
@ -159,6 +167,10 @@ BN_mod_add(BIGNUM *r, const BIGNUM *a, const BIGNUM *b, const BIGNUM *m,
|
|||
int
|
||||
BN_mod_add_quick(BIGNUM *r, const BIGNUM *a, const BIGNUM *b, const BIGNUM *m)
|
||||
{
|
||||
if (r == m) {
|
||||
BNerror(BN_R_INVALID_ARGUMENT);
|
||||
return 0;
|
||||
}
|
||||
if (!BN_uadd(r, a, b))
|
||||
return 0;
|
||||
if (BN_ucmp(r, m) >= 0)
|
||||
|
@ -170,6 +182,10 @@ int
|
|||
BN_mod_sub(BIGNUM *r, const BIGNUM *a, const BIGNUM *b, const BIGNUM *m,
|
||||
BN_CTX *ctx)
|
||||
{
|
||||
if (r == m) {
|
||||
BNerror(BN_R_INVALID_ARGUMENT);
|
||||
return 0;
|
||||
}
|
||||
if (!BN_sub(r, a, b))
|
||||
return 0;
|
||||
return BN_nnmod(r, r, m, ctx);
|
||||
|
@ -182,6 +198,10 @@ BN_mod_sub(BIGNUM *r, const BIGNUM *a, const BIGNUM *b, const BIGNUM *m,
|
|||
int
|
||||
BN_mod_sub_quick(BIGNUM *r, const BIGNUM *a, const BIGNUM *b, const BIGNUM *m)
|
||||
{
|
||||
if (r == m) {
|
||||
BNerror(BN_R_INVALID_ARGUMENT);
|
||||
return 0;
|
||||
}
|
||||
if (BN_ucmp(a, b) >= 0)
|
||||
return BN_usub(r, a, b);
|
||||
if (!BN_usub(r, b, a))
|
||||
|
@ -198,6 +218,11 @@ BN_mod_mul(BIGNUM *r, const BIGNUM *a, const BIGNUM *b, const BIGNUM *m,
|
|||
|
||||
BN_CTX_start(ctx);
|
||||
|
||||
if (r == m) {
|
||||
BNerror(BN_R_INVALID_ARGUMENT);
|
||||
goto err;
|
||||
}
|
||||
|
||||
rr = r;
|
||||
if (rr == a || rr == b)
|
||||
rr = BN_CTX_get(ctx);
|
||||
|
@ -231,6 +256,10 @@ BN_mod_sqr(BIGNUM *r, const BIGNUM *a, const BIGNUM *m, BN_CTX *ctx)
|
|||
int
|
||||
BN_mod_lshift1(BIGNUM *r, const BIGNUM *a, const BIGNUM *m, BN_CTX *ctx)
|
||||
{
|
||||
if (r == m) {
|
||||
BNerror(BN_R_INVALID_ARGUMENT);
|
||||
return 0;
|
||||
}
|
||||
if (!BN_lshift1(r, a))
|
||||
return 0;
|
||||
return BN_nnmod(r, r, m, ctx);
|
||||
|
@ -243,6 +272,10 @@ BN_mod_lshift1(BIGNUM *r, const BIGNUM *a, const BIGNUM *m, BN_CTX *ctx)
|
|||
int
|
||||
BN_mod_lshift1_quick(BIGNUM *r, const BIGNUM *a, const BIGNUM *m)
|
||||
{
|
||||
if (r == m) {
|
||||
BNerror(BN_R_INVALID_ARGUMENT);
|
||||
return 0;
|
||||
}
|
||||
if (!BN_lshift1(r, a))
|
||||
return 0;
|
||||
if (BN_ucmp(r, m) >= 0)
|
||||
|
@ -258,6 +291,11 @@ BN_mod_lshift(BIGNUM *r, const BIGNUM *a, int n, const BIGNUM *m, BN_CTX *ctx)
|
|||
|
||||
BN_CTX_start(ctx);
|
||||
|
||||
if (r == m) {
|
||||
BNerror(BN_R_INVALID_ARGUMENT);
|
||||
goto err;
|
||||
}
|
||||
|
||||
if (!BN_nnmod(r, a, m, ctx))
|
||||
goto err;
|
||||
|
||||
|
@ -288,6 +326,11 @@ BN_mod_lshift_quick(BIGNUM *r, const BIGNUM *a, int n, const BIGNUM *m)
|
|||
{
|
||||
int max_shift;
|
||||
|
||||
if (r == m) {
|
||||
BNerror(BN_R_INVALID_ARGUMENT);
|
||||
return 0;
|
||||
}
|
||||
|
||||
if (!bn_copy(r, a))
|
||||
return 0;
|
||||
|
||||
|
|
|
@ -1,12 +1,7 @@
|
|||
# $OpenBSD: Makefile,v 1.1 2022/04/23 08:57:52 tobias Exp $
|
||||
# $OpenBSD: Makefile,v 1.2 2023/06/13 10:38:45 tb Exp $
|
||||
|
||||
REGRESS_TARGETS= run-regress
|
||||
|
||||
LDFLAGS= -lutil
|
||||
|
||||
CLEANFILES= ibuf_test ibuf_test.d
|
||||
|
||||
run-regress: ibuf_test
|
||||
${.OBJDIR}/ibuf_test
|
||||
PROG= ibuf_test
|
||||
LDADD= -lutil
|
||||
DPADD= ${LIBUTIL}
|
||||
|
||||
.include <bsd.regress.mk>
|
||||
|
|
|
@ -1,5 +1,4 @@
|
|||
/* $OpenBSD: ibuf_test.c,v 1.2 2023/05/23 09:32:37 claudio Exp $
|
||||
*/
|
||||
/* $OpenBSD: ibuf_test.c,v 1.3 2023/06/13 10:39:46 tb Exp $ */
|
||||
/*
|
||||
* Copyright (c) Tobias Stoeckmann <tobias@openbsd.org>
|
||||
*
|
||||
|
@ -26,7 +25,8 @@
|
|||
#include <stdio.h>
|
||||
|
||||
int
|
||||
test_ibuf_open(void) {
|
||||
test_ibuf_open(void)
|
||||
{
|
||||
struct ibuf *buf;
|
||||
|
||||
if ((buf = ibuf_open(1)) == NULL)
|
||||
|
@ -37,7 +37,8 @@ test_ibuf_open(void) {
|
|||
}
|
||||
|
||||
int
|
||||
test_ibuf_dynamic(void) {
|
||||
test_ibuf_dynamic(void)
|
||||
{
|
||||
struct ibuf *buf;
|
||||
|
||||
if (ibuf_dynamic(100, 0) != NULL)
|
||||
|
@ -51,7 +52,8 @@ test_ibuf_dynamic(void) {
|
|||
}
|
||||
|
||||
int
|
||||
test_ibuf_reserve(void) {
|
||||
test_ibuf_reserve(void)
|
||||
{
|
||||
struct ibuf *buf;
|
||||
int ret;
|
||||
|
||||
|
@ -76,7 +78,8 @@ test_ibuf_reserve(void) {
|
|||
}
|
||||
|
||||
int
|
||||
test_ibuf_seek(void) {
|
||||
test_ibuf_seek(void)
|
||||
{
|
||||
struct ibuf *buf;
|
||||
int ret;
|
||||
|
||||
|
@ -90,7 +93,8 @@ test_ibuf_seek(void) {
|
|||
}
|
||||
|
||||
int
|
||||
test_msgbuf_drain(void) {
|
||||
test_msgbuf_drain(void)
|
||||
{
|
||||
struct msgbuf msgbuf;
|
||||
struct ibuf *buf;
|
||||
|
||||
|
|
|
@ -1,7 +1,12 @@
|
|||
# $OpenBSD: Makefile,v 1.1 2023/06/12 20:19:45 millert Exp $
|
||||
# $OpenBSD: Makefile,v 1.2 2023/06/13 04:59:10 anton Exp $
|
||||
|
||||
SEQ?= /usr/bin/seq
|
||||
|
||||
CLEANFILES+= *.out
|
||||
|
||||
REGRESS_TARGETS+=seqtest
|
||||
seqtest:
|
||||
sh ${.CURDIR}/$@.sh ${SEQ} $@.out
|
||||
diff ${.CURDIR}/$@.expected $@.out
|
||||
|
||||
.include <bsd.regress.mk>
|
||||
|
|
|
@ -1,10 +1,10 @@
|
|||
# $OpenBSD: Makefile,v 1.9 2023/04/18 19:41:50 bluhm Exp $
|
||||
# $OpenBSD: Makefile,v 1.10 2023/06/13 11:41:36 claudio Exp $
|
||||
|
||||
PROGS += test-http
|
||||
|
||||
SRCS_test-http = test-http.c http.c io.c encoding.c
|
||||
LDADD_test-http = -ltls -lssl -lcrypto -lutil
|
||||
DPADD_test-http = ${LIBTLS} ${LIBSSL} ${LIBCRYPTO} ${LIBUTIL}
|
||||
LDADD_test-http = -ltls -lssl -lcrypto -lutil -lz
|
||||
DPADD_test-http = ${LIBTLS} ${LIBSSL} ${LIBCRYPTO} ${LIBUTIL} ${LIBZ}
|
||||
|
||||
SERVER = jigsaw.w3.org
|
||||
.if ! (make(clean) || make(cleandir) || make(obj))
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
/* $OpenBSD: iked.h,v 1.215 2023/06/12 09:02:31 claudio Exp $ */
|
||||
/* $OpenBSD: iked.h,v 1.216 2023/06/13 12:34:12 tb Exp $ */
|
||||
|
||||
/*
|
||||
* Copyright (c) 2019 Tobias Heider <tobias.heider@stusta.de>
|
||||
|
@ -1252,6 +1252,8 @@ uint32_t
|
|||
prefixlen2mask(uint8_t);
|
||||
const char *
|
||||
print_host(struct sockaddr *, char *, size_t);
|
||||
const char *
|
||||
print_addr(void *);
|
||||
char *get_string(uint8_t *, size_t);
|
||||
const char *
|
||||
print_proto(uint8_t);
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
/* $OpenBSD: ikev2.c,v 1.368 2023/06/12 09:02:31 claudio Exp $ */
|
||||
/* $OpenBSD: ikev2.c,v 1.370 2023/06/13 12:34:12 tb Exp $ */
|
||||
|
||||
/*
|
||||
* Copyright (c) 2019 Tobias Heider <tobias.heider@stusta.de>
|
||||
|
@ -669,8 +669,8 @@ ikev2_recv(struct iked *env, struct iked_message *msg)
|
|||
print_map(hdr->ike_exchange, ikev2_exchange_map),
|
||||
msg->msg_response ? "res" : "req",
|
||||
msg->msg_msgid,
|
||||
print_host((struct sockaddr *)&msg->msg_peer, NULL, 0),
|
||||
print_host((struct sockaddr *)&msg->msg_local, NULL, 0),
|
||||
print_addr(&msg->msg_peer),
|
||||
print_addr(&msg->msg_local),
|
||||
ibuf_length(msg->msg_data),
|
||||
msg->msg_policy->pol_name);
|
||||
log_debug("%s: ispi %s rspi %s", __func__,
|
||||
|
@ -783,8 +783,7 @@ ikev2_recv(struct iked *env, struct iked_message *msg)
|
|||
sa->sa_fd = msg->msg_fd;
|
||||
|
||||
log_debug("%s: updated SA to peer %s local %s", __func__,
|
||||
print_host((struct sockaddr *)&sa->sa_peer.addr, NULL, 0),
|
||||
print_host((struct sockaddr *)&sa->sa_local.addr, NULL, 0));
|
||||
print_addr(&sa->sa_peer.addr), print_addr(&sa->sa_local.addr));
|
||||
|
||||
done:
|
||||
if (initiator)
|
||||
|
@ -1101,16 +1100,13 @@ ikev2_ike_auth_recv(struct iked *env, struct iked_sa *sa,
|
|||
if (sa->sa_cp == IKEV2_CP_REPLY) {
|
||||
if (sa->sa_cp_addr)
|
||||
log_info("%s: obtained lease: %s", SPI_SA(sa, __func__),
|
||||
print_host((struct sockaddr *)&sa->sa_cp_addr->addr,
|
||||
NULL, 0));
|
||||
print_addr(&sa->sa_cp_addr->addr));
|
||||
if (sa->sa_cp_addr6)
|
||||
log_info("%s: obtained lease: %s", SPI_SA(sa, __func__),
|
||||
print_host((struct sockaddr *)&sa->sa_cp_addr6->addr,
|
||||
NULL, 0));
|
||||
print_addr(&sa->sa_cp_addr6->addr));
|
||||
if (sa->sa_cp_dns)
|
||||
log_info("%s: obtained DNS: %s", SPI_SA(sa, __func__),
|
||||
print_host((struct sockaddr *)&sa->sa_cp_dns->addr,
|
||||
NULL, 0));
|
||||
print_addr(&sa->sa_cp_dns->addr));
|
||||
}
|
||||
|
||||
return ikev2_ike_auth(env, sa);
|
||||
|
@ -1296,8 +1292,7 @@ ikev2_enable_natt(struct iked *env, struct iked_sa *sa,
|
|||
|
||||
log_debug("%s: detected NAT, enabling UDP encapsulation,"
|
||||
" updated SA to peer %s local %s", __func__,
|
||||
print_host((struct sockaddr *)&sa->sa_peer.addr, NULL, 0),
|
||||
print_host((struct sockaddr *)&sa->sa_local.addr, NULL, 0));
|
||||
print_addr(&sa->sa_peer.addr), print_addr(&sa->sa_local.addr));
|
||||
}
|
||||
|
||||
void
|
||||
|
@ -1318,9 +1313,7 @@ ikev2_init_ike_sa(struct iked *env, void *arg)
|
|||
|
||||
if (ikev2_init_ike_sa_peer(env, pol, &pol->pol_peer, NULL))
|
||||
log_debug("%s: failed to initiate with peer %s",
|
||||
__func__,
|
||||
print_host((struct sockaddr *)&pol->pol_peer.addr,
|
||||
NULL, 0));
|
||||
__func__, print_addr(&pol->pol_peer.addr));
|
||||
}
|
||||
|
||||
timer_set(env, &env->sc_inittmr, ikev2_init_ike_sa, NULL);
|
||||
|
@ -2326,7 +2319,7 @@ ikev2_nat_detection(struct iked *env, struct iked_message *msg,
|
|||
frompeer ? "peer" : "local",
|
||||
print_spi(betoh64(ispi), 8),
|
||||
print_spi(betoh64(rspi), 8),
|
||||
print_host(src, NULL, 0));
|
||||
print_addr(src));
|
||||
ss = src;
|
||||
break;
|
||||
case IKEV2_N_NAT_DETECTION_DESTINATION_IP:
|
||||
|
@ -2334,7 +2327,7 @@ ikev2_nat_detection(struct iked *env, struct iked_message *msg,
|
|||
frompeer ? "peer" : "local",
|
||||
print_spi(betoh64(ispi), 8),
|
||||
print_spi(betoh64(rspi), 8),
|
||||
print_host(dst, NULL, 0));
|
||||
print_addr(dst));
|
||||
ss = dst;
|
||||
break;
|
||||
default:
|
||||
|
@ -5225,12 +5218,12 @@ ikev2_ike_sa_keepalive(struct iked *env, void *arg)
|
|||
(struct sockaddr *)&sa->sa_local.addr, sa->sa_local.addr.ss_len)
|
||||
== -1)
|
||||
log_warn("%s: sendtofrom: peer %s local %s", __func__,
|
||||
print_host((struct sockaddr *)&sa->sa_peer.addr, NULL, 0),
|
||||
print_host((struct sockaddr *)&sa->sa_local.addr, NULL, 0));
|
||||
print_addr(&sa->sa_peer.addr),
|
||||
print_addr(&sa->sa_local.addr));
|
||||
else
|
||||
log_debug("%s: peer %s local %s", __func__,
|
||||
print_host((struct sockaddr *)&sa->sa_peer.addr, NULL, 0),
|
||||
print_host((struct sockaddr *)&sa->sa_local.addr, NULL, 0));
|
||||
print_addr(&sa->sa_peer.addr),
|
||||
print_addr(&sa->sa_local.addr));
|
||||
ikestat_inc(env, ikes_keepalive_sent);
|
||||
timer_add(env, &sa->sa_keepalive, IKED_IKE_SA_KEEPALIVE_TIMEOUT);
|
||||
}
|
||||
|
@ -6430,11 +6423,16 @@ ikev2_childsa_enable(struct iked *env, struct iked_sa *sa)
|
|||
int ret = -1;
|
||||
|
||||
spif = open_memstream(&spibuf, &spisz);
|
||||
flowf = open_memstream(&flowbuf, &flowsz);
|
||||
if (spif == NULL || flowf == NULL) {
|
||||
if (spif == NULL) {
|
||||
log_warn("%s", __func__);
|
||||
return (ret);
|
||||
}
|
||||
flowf = open_memstream(&flowbuf, &flowsz);
|
||||
if (flowf == NULL) {
|
||||
log_warn("%s", __func__);
|
||||
fclose(spif);
|
||||
return (ret);
|
||||
}
|
||||
|
||||
TAILQ_FOREACH(csa, &sa->sa_childsas, csa_entry) {
|
||||
if (csa->csa_rekey || csa->csa_loaded)
|
||||
|
@ -6552,18 +6550,15 @@ ikev2_childsa_enable(struct iked *env, struct iked_sa *sa)
|
|||
fputs(", ", flowf);
|
||||
fprintf(flowf, "%s-%s/%d%s%s%s%s%s=%s/%d(%u)%s",
|
||||
print_map(flow->flow_saproto, ikev2_saproto_map),
|
||||
print_host((struct sockaddr *)&flow->flow_src.addr,
|
||||
NULL, 0),
|
||||
print_addr(&flow->flow_src.addr),
|
||||
flow->flow_src.addr_mask,
|
||||
flow->flow_prenat.addr_af != 0 ? "[": "",
|
||||
flow->flow_prenat.addr_af != 0 ?
|
||||
print_host((struct sockaddr *)
|
||||
&flow->flow_prenat.addr, NULL, 0) : "",
|
||||
print_addr(&flow->flow_prenat.addr) : "",
|
||||
flow->flow_prenat.addr_af != 0 ? "/" : "",
|
||||
flow->flow_prenat.addr_af != 0 ? prenat_mask : "",
|
||||
flow->flow_prenat.addr_af != 0 ? "]": "",
|
||||
print_host((struct sockaddr *)&flow->flow_dst.addr,
|
||||
NULL, 0),
|
||||
print_addr(&flow->flow_dst.addr),
|
||||
flow->flow_dst.addr_mask,
|
||||
flow->flow_ipproto,
|
||||
reload ? "-R" : "");
|
||||
|
@ -6575,8 +6570,7 @@ ikev2_childsa_enable(struct iked *env, struct iked_sa *sa)
|
|||
memcpy(&sa->sa_peer_loaded, &sa->sa_peer,
|
||||
sizeof(sa->sa_peer_loaded));
|
||||
log_debug("%s: remember SA peer %s", __func__,
|
||||
print_host((struct sockaddr *)&sa->sa_peer_loaded.addr,
|
||||
NULL, 0));
|
||||
print_addr(&sa->sa_peer_loaded.addr));
|
||||
}
|
||||
|
||||
fflush(spif);
|
||||
|
@ -7124,8 +7118,7 @@ ikev2_cp_setaddr_pool(struct iked *env, struct iked_sa *sa,
|
|||
log_info(
|
||||
"%s: giving up assigned address %s to IKESA %s",
|
||||
SPI_SA(osa, __func__),
|
||||
print_host((struct sockaddr *)
|
||||
&sa->sa_addrpool->addr, NULL, 0),
|
||||
print_addr(&sa->sa_addrpool->addr),
|
||||
print_spi(sa->sa_hdr.sh_ispi, 8));
|
||||
}
|
||||
if (sa->sa_addrpool6) {
|
||||
|
@ -7133,8 +7126,7 @@ ikev2_cp_setaddr_pool(struct iked *env, struct iked_sa *sa,
|
|||
log_info(
|
||||
"%s: giving up assigned v6 address %s to IKESA %s",
|
||||
SPI_SA(osa, __func__),
|
||||
print_host((struct sockaddr *)
|
||||
&sa->sa_addrpool6->addr, NULL, 0),
|
||||
print_addr(&sa->sa_addrpool6->addr),
|
||||
print_spi(sa->sa_hdr.sh_ispi, 8));
|
||||
}
|
||||
if (family == AF_INET && sa->sa_addrpool != NULL)
|
||||
|
@ -7263,7 +7255,7 @@ ikev2_cp_setaddr_pool(struct iked *env, struct iked_sa *sa,
|
|||
if (ikev2_print_id(IKESA_DSTID(sa), idstr, sizeof(idstr)) == -1)
|
||||
bzero(idstr, sizeof(idstr));
|
||||
log_info("%sassigned address %s to %s%s", SPI_SA(sa, NULL),
|
||||
print_host((struct sockaddr *)&addr.addr, NULL, 0),
|
||||
print_addr(&addr.addr),
|
||||
idstr, requested ? " (requested by peer)" : "");
|
||||
return (0);
|
||||
}
|
||||
|
@ -7369,8 +7361,8 @@ ikev2_update_sa_addresses(struct iked *env, struct iked_sa *sa)
|
|||
return -1;
|
||||
|
||||
log_info("%s: old %s new %s", SPI_SA(sa, __func__),
|
||||
print_host((struct sockaddr *)&sa->sa_peer_loaded.addr, NULL, 0),
|
||||
print_host((struct sockaddr *)&sa->sa_peer.addr, NULL, 0));
|
||||
print_addr(&sa->sa_peer_loaded.addr),
|
||||
print_addr(&sa->sa_peer.addr));
|
||||
|
||||
TAILQ_FOREACH(csa, &sa->sa_childsas, csa_entry) {
|
||||
if (!csa->csa_loaded)
|
||||
|
@ -7444,11 +7436,10 @@ ikev2_info_sa(struct iked *env, int dolog, const char *msg, struct iked_sa *sa)
|
|||
msg, sa,
|
||||
print_spi(sa->sa_hdr.sh_rspi, 8),
|
||||
print_spi(sa->sa_hdr.sh_ispi, 8),
|
||||
print_host((struct sockaddr *)&sa->sa_local.addr, NULL, 0),
|
||||
print_host((struct sockaddr *)&sa->sa_peer.addr, NULL, 0),
|
||||
print_addr(&sa->sa_local.addr),
|
||||
print_addr(&sa->sa_peer.addr),
|
||||
idstr,
|
||||
sa->sa_addrpool ?
|
||||
print_host((struct sockaddr *)&sa->sa_addrpool->addr, NULL, 0) : "",
|
||||
sa->sa_addrpool ? print_addr(&sa->sa_addrpool->addr) : "",
|
||||
print_map(sa->sa_state, ikev2_state_map),
|
||||
sa->sa_hdr.sh_initiator ? 'i' : 'r',
|
||||
sa->sa_natt ? " natt" : "",
|
||||
|
@ -7479,8 +7470,8 @@ ikev2_info_csa(struct iked *env, int dolog, const char *msg, struct iked_childsa
|
|||
print_map(csa->csa_saproto, ikev2_saproto_map),
|
||||
print_spi(csa->csa_spi.spi, csa->csa_spi.spi_size),
|
||||
csa->csa_dir == IPSP_DIRECTION_IN ? "in" : "out",
|
||||
print_host((struct sockaddr *)&csa->csa_local->addr, NULL, 0),
|
||||
print_host((struct sockaddr *)&csa->csa_peer->addr, NULL, 0),
|
||||
print_addr(&csa->csa_local->addr),
|
||||
print_addr(&csa->csa_peer->addr),
|
||||
csa->csa_loaded ? "L" : "",
|
||||
csa->csa_rekey ? "R" : "",
|
||||
csa->csa_allocated ? "A" : "",
|
||||
|
@ -7519,13 +7510,13 @@ ikev2_info_flow(struct iked *env, int dolog, const char *msg, struct iked_flow *
|
|||
"%s: %p %s %s %s/%d -> %s/%d %s%s%s%s%s[%u]@%d (%s) @%p\n", msg, flow,
|
||||
print_map(flow->flow_saproto, ikev2_saproto_map),
|
||||
flow->flow_dir == IPSP_DIRECTION_IN ? "in" : "out",
|
||||
print_host((struct sockaddr *)&flow->flow_src.addr, NULL, 0),
|
||||
print_addr(&flow->flow_src.addr),
|
||||
flow->flow_src.addr_mask,
|
||||
print_host((struct sockaddr *)&flow->flow_dst.addr, NULL, 0),
|
||||
print_addr(&flow->flow_dst.addr),
|
||||
flow->flow_dst.addr_mask,
|
||||
flow->flow_prenat.addr_af != 0 ? "[": "",
|
||||
flow->flow_prenat.addr_af != 0 ? print_host((struct sockaddr *)
|
||||
&flow->flow_prenat.addr, NULL, 0) : "",
|
||||
flow->flow_prenat.addr_af != 0 ?
|
||||
print_addr(&flow->flow_prenat.addr) : "",
|
||||
flow->flow_prenat.addr_af != 0 ? "/" : "",
|
||||
flow->flow_prenat.addr_af != 0 ? prenat_mask : "",
|
||||
flow->flow_prenat.addr_af != 0 ? "] ": "",
|
||||
|
@ -7611,14 +7602,12 @@ ikev2_log_established(struct iked_sa *sa)
|
|||
log_info(
|
||||
"%sestablished peer %s[%s] local %s[%s]%s%s%s%s policy '%s'%s"
|
||||
" (enc %s%s%s group %s prf %s)", SPI_SA(sa, NULL),
|
||||
print_host((struct sockaddr *)&sa->sa_peer.addr, NULL, 0), dstid,
|
||||
print_host((struct sockaddr *)&sa->sa_local.addr, NULL, 0), srcid,
|
||||
print_addr(&sa->sa_peer.addr), dstid,
|
||||
print_addr(&sa->sa_local.addr), srcid,
|
||||
sa->sa_addrpool ? " assigned " : "",
|
||||
sa->sa_addrpool ?
|
||||
print_host((struct sockaddr *)&sa->sa_addrpool->addr, NULL, 0) : "",
|
||||
sa->sa_addrpool ? print_addr(&sa->sa_addrpool->addr) : "",
|
||||
sa->sa_addrpool6 ? " assigned " : "",
|
||||
sa->sa_addrpool6 ?
|
||||
print_host((struct sockaddr *)&sa->sa_addrpool6->addr, NULL, 0) : "",
|
||||
sa->sa_addrpool6 ? print_addr(&sa->sa_addrpool6->addr) : "",
|
||||
sa->sa_policy ? sa->sa_policy->pol_name : "",
|
||||
sa->sa_hdr.sh_initiator ? " as initiator" : " as responder",
|
||||
print_xf(sa->sa_encr->encr_id, cipher_keylength(sa->sa_encr) -
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
/* $OpenBSD: ikev2_msg.c,v 1.94 2023/06/06 13:27:49 claudio Exp $ */
|
||||
/* $OpenBSD: ikev2_msg.c,v 1.95 2023/06/13 12:34:12 tb Exp $ */
|
||||
|
||||
/*
|
||||
* Copyright (c) 2019 Tobias Heider <tobias.heider@stusta.de>
|
||||
|
@ -285,8 +285,8 @@ ikev2_msg_send(struct iked *env, struct iked_message *msg)
|
|||
print_map(exchange, ikev2_exchange_map),
|
||||
(flags & IKEV2_FLAG_RESPONSE) ? "res" : "req",
|
||||
betoh32(hdr->ike_msgid),
|
||||
print_host((struct sockaddr *)&msg->msg_peer, NULL, 0),
|
||||
print_host((struct sockaddr *)&msg->msg_local, NULL, 0),
|
||||
print_addr(&msg->msg_peer),
|
||||
print_addr(&msg->msg_local),
|
||||
ibuf_length(buf), isnatt ? ", NAT-T" : "");
|
||||
|
||||
if (isnatt) {
|
||||
|
@ -1290,8 +1290,8 @@ ikev2_msg_retransmit_response(struct iked *env, struct iked_sa *sa,
|
|||
SPI_SA(sa, NULL),
|
||||
print_map(exchange, ikev2_exchange_map),
|
||||
m->msg_msgid,
|
||||
print_host((struct sockaddr *)&m->msg_local, NULL, 0),
|
||||
print_host((struct sockaddr *)&m->msg_peer, NULL, 0));
|
||||
print_addr(&m->msg_local),
|
||||
print_addr(&m->msg_peer));
|
||||
}
|
||||
|
||||
timer_add(env, &mr->mrt_timer, IKED_RESPONSE_TIMEOUT);
|
||||
|
@ -1333,8 +1333,8 @@ ikev2_msg_retransmit_timeout(struct iked *env, void *arg)
|
|||
"local %s", SPI_SA(sa, NULL), mr->mrt_tries + 1,
|
||||
print_map(msg->msg_exchange, ikev2_exchange_map),
|
||||
msg->msg_msgid,
|
||||
print_host((struct sockaddr *)&msg->msg_peer, NULL, 0),
|
||||
print_host((struct sockaddr *)&msg->msg_local, NULL, 0));
|
||||
print_addr(&msg->msg_peer),
|
||||
print_addr(&msg->msg_local));
|
||||
}
|
||||
/* Exponential timeout */
|
||||
timer_add(env, &mr->mrt_timer,
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
/* $OpenBSD: pfkey.c,v 1.81 2022/07/22 15:33:53 tobhe Exp $ */
|
||||
/* $OpenBSD: pfkey.c,v 1.82 2023/06/13 12:34:12 tb Exp $ */
|
||||
|
||||
/*
|
||||
* Copyright (c) 2010-2013 Reyk Floeter <reyk@openbsd.org>
|
||||
|
@ -1853,7 +1853,7 @@ pfkey_process(struct iked *env, struct pfkey_message *pm)
|
|||
flow.flow_peer = &peer;
|
||||
|
||||
log_debug("%s: acquire request (peer %s)", __func__,
|
||||
print_host(speer, NULL, 0));
|
||||
print_addr(speer));
|
||||
|
||||
/* get the matching flow */
|
||||
bzero(&smsg, sizeof(smsg));
|
||||
|
@ -1992,9 +1992,9 @@ pfkey_process(struct iked *env, struct pfkey_message *pm)
|
|||
|
||||
log_debug("%s: flow %s from %s/%s to %s/%s via %s", __func__,
|
||||
flow.flow_dir == IPSP_DIRECTION_IN ? "in" : "out",
|
||||
print_host(ssrc, NULL, 0), print_host(smask, NULL, 0),
|
||||
print_host(sdst, NULL, 0), print_host(dmask, NULL, 0),
|
||||
print_host(speer, NULL, 0));
|
||||
print_addr(ssrc), print_addr(smask),
|
||||
print_addr(sdst), print_addr(dmask),
|
||||
print_addr(speer));
|
||||
|
||||
ret = ikev2_child_sa_acquire(env, &flow);
|
||||
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
/* $OpenBSD: policy.c,v 1.94 2023/05/23 13:12:19 claudio Exp $ */
|
||||
/* $OpenBSD: policy.c,v 1.95 2023/06/13 12:34:12 tb Exp $ */
|
||||
|
||||
/*
|
||||
* Copyright (c) 2020-2021 Tobias Heider <tobhe@openbsd.org>
|
||||
|
@ -398,10 +398,8 @@ sa_state(struct iked *env, struct iked_sa *sa, int state)
|
|||
case IKEV2_STATE_CLOSED:
|
||||
log_debug("%s: %s -> %s from %s to %s policy '%s'",
|
||||
SPI_SA(sa, __func__), a, b,
|
||||
print_host((struct sockaddr *)&sa->sa_peer.addr,
|
||||
NULL, 0),
|
||||
print_host((struct sockaddr *)&sa->sa_local.addr,
|
||||
NULL, 0),
|
||||
print_addr(&sa->sa_peer.addr),
|
||||
print_addr(&sa->sa_local.addr),
|
||||
sa->sa_policy ? sa->sa_policy->pol_name :
|
||||
"<unknown>");
|
||||
break;
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
/* $OpenBSD: print.c,v 1.3 2021/10/26 17:31:22 tobhe Exp $ */
|
||||
/* $OpenBSD: print.c,v 1.4 2023/06/13 12:34:12 tb Exp $ */
|
||||
|
||||
/*
|
||||
* Copyright (c) 2019-2021 Tobias Heider <tobias.heider@stusta.de>
|
||||
|
@ -112,9 +112,7 @@ print_policy(struct iked_policy *pol)
|
|||
print_verbose(" rdomain %d", pol->pol_rdomain);
|
||||
|
||||
RB_FOREACH(flow, iked_flows, &pol->pol_flows) {
|
||||
print_verbose(" from %s",
|
||||
print_host((struct sockaddr *)&flow->flow_src.addr, NULL,
|
||||
0));
|
||||
print_verbose(" from %s", print_addr(&flow->flow_src.addr));
|
||||
if (flow->flow_src.addr_af != AF_UNSPEC &&
|
||||
flow->flow_src.addr_net)
|
||||
print_verbose("/%d", flow->flow_src.addr_mask);
|
||||
|
@ -122,9 +120,7 @@ print_policy(struct iked_policy *pol)
|
|||
print_verbose(" port %d",
|
||||
ntohs(flow->flow_src.addr_port));
|
||||
|
||||
print_verbose(" to %s",
|
||||
print_host((struct sockaddr *)&flow->flow_dst.addr, NULL,
|
||||
0));
|
||||
print_verbose(" to %s", print_addr(&flow->flow_dst.addr));
|
||||
if (flow->flow_dst.addr_af != AF_UNSPEC &&
|
||||
flow->flow_dst.addr_net)
|
||||
print_verbose("/%d", flow->flow_dst.addr_mask);
|
||||
|
@ -134,16 +130,12 @@ print_policy(struct iked_policy *pol)
|
|||
}
|
||||
|
||||
if ((pol->pol_flags & IKED_POLICY_DEFAULT) == 0) {
|
||||
print_verbose(" local %s",
|
||||
print_host((struct sockaddr *)&pol->pol_local.addr, NULL,
|
||||
0));
|
||||
print_verbose(" local %s", print_addr(&pol->pol_local.addr));
|
||||
if (pol->pol_local.addr.ss_family != AF_UNSPEC &&
|
||||
pol->pol_local.addr_net)
|
||||
print_verbose("/%d", pol->pol_local.addr_mask);
|
||||
|
||||
print_verbose(" peer %s",
|
||||
print_host((struct sockaddr *)&pol->pol_peer.addr, NULL,
|
||||
0));
|
||||
print_verbose(" peer %s", print_addr(&pol->pol_peer.addr));
|
||||
if (pol->pol_peer.addr.ss_family != AF_UNSPEC &&
|
||||
pol->pol_peer.addr_net)
|
||||
print_verbose("/%d", pol->pol_peer.addr_mask);
|
||||
|
@ -235,8 +227,7 @@ print_policy(struct iked_policy *pol)
|
|||
cfg = &pol->pol_cfg[i];
|
||||
print_verbose(" config %s %s", print_xf(cfg->cfg_type,
|
||||
cfg->cfg.address.addr_af, cpxfs),
|
||||
print_host((struct sockaddr *)&cfg->cfg.address.addr, NULL,
|
||||
0));
|
||||
print_addr(&cfg->cfg.address.addr));
|
||||
}
|
||||
|
||||
if (pol->pol_iface != 0 && if_indextoname(pol->pol_iface, iface) != NULL)
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
/* $OpenBSD: util.c,v 1.40 2020/08/15 11:31:17 tobhe Exp $ */
|
||||
/* $OpenBSD: util.c,v 1.41 2023/06/13 12:34:12 tb Exp $ */
|
||||
|
||||
/*
|
||||
* Copyright (c) 2010-2013 Reyk Floeter <reyk@openbsd.org>
|
||||
|
@ -669,6 +669,12 @@ print_host(struct sockaddr *sa, char *buf, size_t len)
|
|||
return (buf);
|
||||
}
|
||||
|
||||
const char *
|
||||
print_addr(void *addr)
|
||||
{
|
||||
return print_host(addr, NULL, 0);
|
||||
}
|
||||
|
||||
char *
|
||||
get_string(uint8_t *ptr, size_t len)
|
||||
{
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
/* $OpenBSD: vroute.c,v 1.18 2023/02/10 19:51:08 tobhe Exp $ */
|
||||
/* $OpenBSD: vroute.c,v 1.19 2023/06/13 12:34:12 tb Exp $ */
|
||||
|
||||
/*
|
||||
* Copyright (c) 2021 Tobias Heider <tobhe@openbsd.org>
|
||||
|
@ -840,9 +840,9 @@ vroute_doroute(struct iked *env, int flags, int addrs, int rdomain, uint8_t type
|
|||
flags & RTF_HOST ? "H" : "",
|
||||
flags & RTF_GATEWAY ? "G" : "",
|
||||
addrs,
|
||||
addrs & RTA_DST ? print_host(dest, NULL, 0) : "<>",
|
||||
addrs & RTA_NETMASK ? print_host(mask, NULL, 0) : "<>",
|
||||
addrs & RTA_GATEWAY ? print_host(addr, NULL, 0) : "<>");
|
||||
addrs & RTA_DST ? print_addr(dest) : "<>",
|
||||
addrs & RTA_NETMASK ? print_addr(mask) : "<>",
|
||||
addrs & RTA_GATEWAY ? print_addr(addr) : "<>");
|
||||
|
||||
if (writev(ivr->ivr_rtsock, iov, iovcnt) == -1) {
|
||||
if ((type == RTM_ADD && errno != EEXIST) ||
|
||||
|
@ -933,9 +933,7 @@ vroute_doaddr(struct iked *env, char *ifname, struct sockaddr *addr,
|
|||
memcpy(&req.ifra_mask, mask, sizeof(req.ifra_addr));
|
||||
|
||||
log_debug("%s: %s inet %s netmask %s", __func__,
|
||||
add ? "add" : "del",
|
||||
print_host((struct sockaddr *)addr, NULL, 0),
|
||||
print_host((struct sockaddr *)mask, NULL, 0));
|
||||
add ? "add" : "del", print_addr(addr), print_addr(mask));
|
||||
|
||||
ioreq = add ? SIOCAIFADDR : SIOCDIFADDR;
|
||||
if (ioctl(ivr->ivr_iosock, ioreq, &req) == -1) {
|
||||
|
@ -955,9 +953,7 @@ vroute_doaddr(struct iked *env, char *ifname, struct sockaddr *addr,
|
|||
sizeof(req6.ifra_prefixmask));
|
||||
|
||||
log_debug("%s: %s inet6 %s netmask %s", __func__,
|
||||
add ? "add" : "del",
|
||||
print_host((struct sockaddr *)addr, NULL, 0),
|
||||
print_host((struct sockaddr *)mask, NULL, 0));
|
||||
add ? "add" : "del", print_addr(addr), print_addr(mask));
|
||||
|
||||
ioreq = add ? SIOCAIFADDR_IN6 : SIOCDIFADDR_IN6;
|
||||
if (ioctl(ivr->ivr_iosock6, ioreq, &req6) == -1) {
|
||||
|
|
|
@ -4596,7 +4596,11 @@ static int amdgpu_device_recover_vram(struct amdgpu_device *adev)
|
|||
dev_info(adev->dev, "recover vram bo from shadow start\n");
|
||||
mutex_lock(&adev->shadow_list_lock);
|
||||
list_for_each_entry(vmbo, &adev->shadow_list, shadow_list) {
|
||||
shadow = &vmbo->bo;
|
||||
/* If vm is compute context or adev is APU, shadow will be NULL */
|
||||
if (!vmbo->shadow)
|
||||
continue;
|
||||
shadow = vmbo->shadow;
|
||||
|
||||
/* No need to recover an evicted BO */
|
||||
if (shadow->tbo.resource->mem_type != TTM_PL_TT ||
|
||||
shadow->tbo.resource->start == AMDGPU_BO_INVALID_OFFSET ||
|
||||
|
|
|
@ -21,6 +21,8 @@
|
|||
*
|
||||
*/
|
||||
|
||||
#include <linux/firmware.h>
|
||||
|
||||
#include "amdgpu_mes.h"
|
||||
#include "amdgpu.h"
|
||||
#include "soc15_common.h"
|
||||
|
@ -1423,3 +1425,60 @@ error_pasid:
|
|||
kfree(vm);
|
||||
return 0;
|
||||
}
|
||||
|
||||
int amdgpu_mes_init_microcode(struct amdgpu_device *adev, int pipe)
|
||||
{
|
||||
const struct mes_firmware_header_v1_0 *mes_hdr;
|
||||
struct amdgpu_firmware_info *info;
|
||||
char ucode_prefix[30];
|
||||
char fw_name[40];
|
||||
int r;
|
||||
|
||||
amdgpu_ucode_ip_version_decode(adev, GC_HWIP, ucode_prefix, sizeof(ucode_prefix));
|
||||
snprintf(fw_name, sizeof(fw_name), "amdgpu/%s_mes%s.bin",
|
||||
ucode_prefix,
|
||||
pipe == AMDGPU_MES_SCHED_PIPE ? "" : "1");
|
||||
r = amdgpu_ucode_request(adev, &adev->mes.fw[pipe], fw_name);
|
||||
if (r)
|
||||
goto out;
|
||||
|
||||
mes_hdr = (const struct mes_firmware_header_v1_0 *)
|
||||
adev->mes.fw[pipe]->data;
|
||||
adev->mes.uc_start_addr[pipe] =
|
||||
le32_to_cpu(mes_hdr->mes_uc_start_addr_lo) |
|
||||
((uint64_t)(le32_to_cpu(mes_hdr->mes_uc_start_addr_hi)) << 32);
|
||||
adev->mes.data_start_addr[pipe] =
|
||||
le32_to_cpu(mes_hdr->mes_data_start_addr_lo) |
|
||||
((uint64_t)(le32_to_cpu(mes_hdr->mes_data_start_addr_hi)) << 32);
|
||||
|
||||
if (adev->firmware.load_type == AMDGPU_FW_LOAD_PSP) {
|
||||
int ucode, ucode_data;
|
||||
|
||||
if (pipe == AMDGPU_MES_SCHED_PIPE) {
|
||||
ucode = AMDGPU_UCODE_ID_CP_MES;
|
||||
ucode_data = AMDGPU_UCODE_ID_CP_MES_DATA;
|
||||
} else {
|
||||
ucode = AMDGPU_UCODE_ID_CP_MES1;
|
||||
ucode_data = AMDGPU_UCODE_ID_CP_MES1_DATA;
|
||||
}
|
||||
|
||||
info = &adev->firmware.ucode[ucode];
|
||||
info->ucode_id = ucode;
|
||||
info->fw = adev->mes.fw[pipe];
|
||||
adev->firmware.fw_size +=
|
||||
roundup2(le32_to_cpu(mes_hdr->mes_ucode_size_bytes),
|
||||
PAGE_SIZE);
|
||||
|
||||
info = &adev->firmware.ucode[ucode_data];
|
||||
info->ucode_id = ucode_data;
|
||||
info->fw = adev->mes.fw[pipe];
|
||||
adev->firmware.fw_size +=
|
||||
roundup2(le32_to_cpu(mes_hdr->mes_ucode_data_size_bytes),
|
||||
PAGE_SIZE);
|
||||
}
|
||||
|
||||
return 0;
|
||||
out:
|
||||
amdgpu_ucode_release(&adev->mes.fw[pipe]);
|
||||
return r;
|
||||
}
|
||||
|
|
|
@ -91,14 +91,12 @@ struct amdgpu_mes {
|
|||
struct amdgpu_bo *ucode_fw_obj[AMDGPU_MAX_MES_PIPES];
|
||||
uint64_t ucode_fw_gpu_addr[AMDGPU_MAX_MES_PIPES];
|
||||
uint32_t *ucode_fw_ptr[AMDGPU_MAX_MES_PIPES];
|
||||
uint32_t ucode_fw_version[AMDGPU_MAX_MES_PIPES];
|
||||
uint64_t uc_start_addr[AMDGPU_MAX_MES_PIPES];
|
||||
|
||||
/* mes ucode data */
|
||||
struct amdgpu_bo *data_fw_obj[AMDGPU_MAX_MES_PIPES];
|
||||
uint64_t data_fw_gpu_addr[AMDGPU_MAX_MES_PIPES];
|
||||
uint32_t *data_fw_ptr[AMDGPU_MAX_MES_PIPES];
|
||||
uint32_t data_fw_version[AMDGPU_MAX_MES_PIPES];
|
||||
uint64_t data_start_addr[AMDGPU_MAX_MES_PIPES];
|
||||
|
||||
/* eop gpu obj */
|
||||
|
@ -310,6 +308,7 @@ struct amdgpu_mes_funcs {
|
|||
|
||||
int amdgpu_mes_ctx_get_offs(struct amdgpu_ring *ring, unsigned int id_offs);
|
||||
|
||||
int amdgpu_mes_init_microcode(struct amdgpu_device *adev, int pipe);
|
||||
int amdgpu_mes_init(struct amdgpu_device *adev);
|
||||
void amdgpu_mes_fini(struct amdgpu_device *adev);
|
||||
|
||||
|
|
|
@ -41,6 +41,7 @@ static int amdgpu_sched_process_priority_override(struct amdgpu_device *adev,
|
|||
#ifdef notyet
|
||||
struct fd f = fdget(fd);
|
||||
struct amdgpu_fpriv *fpriv;
|
||||
struct amdgpu_ctx_mgr *mgr;
|
||||
struct amdgpu_ctx *ctx;
|
||||
uint32_t id;
|
||||
int r;
|
||||
|
@ -54,8 +55,11 @@ static int amdgpu_sched_process_priority_override(struct amdgpu_device *adev,
|
|||
return r;
|
||||
}
|
||||
|
||||
idr_for_each_entry(&fpriv->ctx_mgr.ctx_handles, ctx, id)
|
||||
mgr = &fpriv->ctx_mgr;
|
||||
mutex_lock(&mgr->lock);
|
||||
idr_for_each_entry(&mgr->ctx_handles, ctx, id)
|
||||
amdgpu_ctx_priority_override(ctx, priority);
|
||||
mutex_unlock(&mgr->lock);
|
||||
|
||||
fdput(f);
|
||||
return 0;
|
||||
|
|
|
@ -1095,3 +1095,39 @@ void amdgpu_ucode_ip_version_decode(struct amdgpu_device *adev, int block_type,
|
|||
|
||||
snprintf(ucode_prefix, len, "%s_%d_%d_%d", ip_name, maj, min, rev);
|
||||
}
|
||||
|
||||
/*
|
||||
* amdgpu_ucode_request - Fetch and validate amdgpu microcode
|
||||
*
|
||||
* @adev: amdgpu device
|
||||
* @fw: pointer to load firmware to
|
||||
* @fw_name: firmware to load
|
||||
*
|
||||
* This is a helper that will use request_firmware and amdgpu_ucode_validate
|
||||
* to load and run basic validation on firmware. If the load fails, remap
|
||||
* the error code to -ENODEV, so that early_init functions will fail to load.
|
||||
*/
|
||||
int amdgpu_ucode_request(struct amdgpu_device *adev, const struct firmware **fw,
|
||||
const char *fw_name)
|
||||
{
|
||||
int err = request_firmware(fw, fw_name, adev->dev);
|
||||
|
||||
if (err)
|
||||
return -ENODEV;
|
||||
err = amdgpu_ucode_validate(*fw);
|
||||
if (err)
|
||||
dev_dbg(adev->dev, "\"%s\" failed to validate\n", fw_name);
|
||||
|
||||
return err;
|
||||
}
|
||||
|
||||
/*
|
||||
* amdgpu_ucode_release - Release firmware microcode
|
||||
*
|
||||
* @fw: pointer to firmware to release
|
||||
*/
|
||||
void amdgpu_ucode_release(const struct firmware **fw)
|
||||
{
|
||||
release_firmware(*fw);
|
||||
*fw = NULL;
|
||||
}
|
||||
|
|
|
@ -543,6 +543,9 @@ void amdgpu_ucode_print_sdma_hdr(const struct common_firmware_header *hdr);
|
|||
void amdgpu_ucode_print_psp_hdr(const struct common_firmware_header *hdr);
|
||||
void amdgpu_ucode_print_gpu_info_hdr(const struct common_firmware_header *hdr);
|
||||
int amdgpu_ucode_validate(const struct firmware *fw);
|
||||
int amdgpu_ucode_request(struct amdgpu_device *adev, const struct firmware **fw,
|
||||
const char *fw_name);
|
||||
void amdgpu_ucode_release(const struct firmware **fw);
|
||||
bool amdgpu_ucode_hdr_version(union amdgpu_firmware_header *hdr,
|
||||
uint16_t hdr_major, uint16_t hdr_minor);
|
||||
|
||||
|
|
|
@ -3798,7 +3798,8 @@ static int gfx_v9_0_hw_fini(void *handle)
|
|||
{
|
||||
struct amdgpu_device *adev = (struct amdgpu_device *)handle;
|
||||
|
||||
amdgpu_irq_put(adev, &adev->gfx.cp_ecc_error_irq, 0);
|
||||
if (amdgpu_ras_is_supported(adev, AMDGPU_RAS_BLOCK__GFX))
|
||||
amdgpu_irq_put(adev, &adev->gfx.cp_ecc_error_irq, 0);
|
||||
amdgpu_irq_put(adev, &adev->gfx.priv_reg_irq, 0);
|
||||
amdgpu_irq_put(adev, &adev->gfx.priv_inst_irq, 0);
|
||||
|
||||
|
|
|
@ -1143,7 +1143,6 @@ static int gmc_v10_0_hw_fini(void *handle)
|
|||
return 0;
|
||||
}
|
||||
|
||||
amdgpu_irq_put(adev, &adev->gmc.ecc_irq, 0);
|
||||
amdgpu_irq_put(adev, &adev->gmc.vm_fault, 0);
|
||||
|
||||
return 0;
|
||||
|
|
|
@ -932,7 +932,6 @@ static int gmc_v11_0_hw_fini(void *handle)
|
|||
return 0;
|
||||
}
|
||||
|
||||
amdgpu_irq_put(adev, &adev->gmc.ecc_irq, 0);
|
||||
amdgpu_irq_put(adev, &adev->gmc.vm_fault, 0);
|
||||
gmc_v11_0_gart_disable(adev);
|
||||
|
||||
|
|
|
@ -1900,7 +1900,6 @@ static int gmc_v9_0_hw_fini(void *handle)
|
|||
if (adev->mmhub.funcs->update_power_gating)
|
||||
adev->mmhub.funcs->update_power_gating(adev, false);
|
||||
|
||||
amdgpu_irq_put(adev, &adev->gmc.ecc_irq, 0);
|
||||
amdgpu_irq_put(adev, &adev->gmc.vm_fault, 0);
|
||||
|
||||
return 0;
|
||||
|
|
|
@ -54,6 +54,7 @@ static int jpeg_v3_0_early_init(void *handle)
|
|||
|
||||
switch (adev->ip_versions[UVD_HWIP][0]) {
|
||||
case IP_VERSION(3, 1, 1):
|
||||
case IP_VERSION(3, 1, 2):
|
||||
break;
|
||||
default:
|
||||
harvest = RREG32_SOC15(JPEG, 0, mmCC_UVD_HARVESTING);
|
||||
|
|
|
@ -375,93 +375,6 @@ static const struct amdgpu_mes_funcs mes_v10_1_funcs = {
|
|||
.resume_gang = mes_v10_1_resume_gang,
|
||||
};
|
||||
|
||||
static int mes_v10_1_init_microcode(struct amdgpu_device *adev,
|
||||
enum admgpu_mes_pipe pipe)
|
||||
{
|
||||
const char *chip_name;
|
||||
char fw_name[30];
|
||||
int err;
|
||||
const struct mes_firmware_header_v1_0 *mes_hdr;
|
||||
struct amdgpu_firmware_info *info;
|
||||
|
||||
switch (adev->ip_versions[GC_HWIP][0]) {
|
||||
case IP_VERSION(10, 1, 10):
|
||||
chip_name = "navi10";
|
||||
break;
|
||||
case IP_VERSION(10, 3, 0):
|
||||
chip_name = "sienna_cichlid";
|
||||
break;
|
||||
default:
|
||||
BUG();
|
||||
}
|
||||
|
||||
if (pipe == AMDGPU_MES_SCHED_PIPE)
|
||||
snprintf(fw_name, sizeof(fw_name), "amdgpu/%s_mes.bin",
|
||||
chip_name);
|
||||
else
|
||||
snprintf(fw_name, sizeof(fw_name), "amdgpu/%s_mes1.bin",
|
||||
chip_name);
|
||||
|
||||
err = request_firmware(&adev->mes.fw[pipe], fw_name, adev->dev);
|
||||
if (err)
|
||||
return err;
|
||||
|
||||
err = amdgpu_ucode_validate(adev->mes.fw[pipe]);
|
||||
if (err) {
|
||||
release_firmware(adev->mes.fw[pipe]);
|
||||
adev->mes.fw[pipe] = NULL;
|
||||
return err;
|
||||
}
|
||||
|
||||
mes_hdr = (const struct mes_firmware_header_v1_0 *)
|
||||
adev->mes.fw[pipe]->data;
|
||||
adev->mes.ucode_fw_version[pipe] =
|
||||
le32_to_cpu(mes_hdr->mes_ucode_version);
|
||||
adev->mes.ucode_fw_version[pipe] =
|
||||
le32_to_cpu(mes_hdr->mes_ucode_data_version);
|
||||
adev->mes.uc_start_addr[pipe] =
|
||||
le32_to_cpu(mes_hdr->mes_uc_start_addr_lo) |
|
||||
((uint64_t)(le32_to_cpu(mes_hdr->mes_uc_start_addr_hi)) << 32);
|
||||
adev->mes.data_start_addr[pipe] =
|
||||
le32_to_cpu(mes_hdr->mes_data_start_addr_lo) |
|
||||
((uint64_t)(le32_to_cpu(mes_hdr->mes_data_start_addr_hi)) << 32);
|
||||
|
||||
if (adev->firmware.load_type == AMDGPU_FW_LOAD_PSP) {
|
||||
int ucode, ucode_data;
|
||||
|
||||
if (pipe == AMDGPU_MES_SCHED_PIPE) {
|
||||
ucode = AMDGPU_UCODE_ID_CP_MES;
|
||||
ucode_data = AMDGPU_UCODE_ID_CP_MES_DATA;
|
||||
} else {
|
||||
ucode = AMDGPU_UCODE_ID_CP_MES1;
|
||||
ucode_data = AMDGPU_UCODE_ID_CP_MES1_DATA;
|
||||
}
|
||||
|
||||
info = &adev->firmware.ucode[ucode];
|
||||
info->ucode_id = ucode;
|
||||
info->fw = adev->mes.fw[pipe];
|
||||
adev->firmware.fw_size +=
|
||||
roundup2(le32_to_cpu(mes_hdr->mes_ucode_size_bytes),
|
||||
PAGE_SIZE);
|
||||
|
||||
info = &adev->firmware.ucode[ucode_data];
|
||||
info->ucode_id = ucode_data;
|
||||
info->fw = adev->mes.fw[pipe];
|
||||
adev->firmware.fw_size +=
|
||||
roundup2(le32_to_cpu(mes_hdr->mes_ucode_data_size_bytes),
|
||||
PAGE_SIZE);
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static void mes_v10_1_free_microcode(struct amdgpu_device *adev,
|
||||
enum admgpu_mes_pipe pipe)
|
||||
{
|
||||
release_firmware(adev->mes.fw[pipe]);
|
||||
adev->mes.fw[pipe] = NULL;
|
||||
}
|
||||
|
||||
static int mes_v10_1_allocate_ucode_buffer(struct amdgpu_device *adev,
|
||||
enum admgpu_mes_pipe pipe)
|
||||
{
|
||||
|
@ -1019,10 +932,6 @@ static int mes_v10_1_sw_init(void *handle)
|
|||
if (!adev->enable_mes_kiq && pipe == AMDGPU_MES_KIQ_PIPE)
|
||||
continue;
|
||||
|
||||
r = mes_v10_1_init_microcode(adev, pipe);
|
||||
if (r)
|
||||
return r;
|
||||
|
||||
r = mes_v10_1_allocate_eop_buf(adev, pipe);
|
||||
if (r)
|
||||
return r;
|
||||
|
@ -1059,8 +968,7 @@ static int mes_v10_1_sw_fini(void *handle)
|
|||
amdgpu_bo_free_kernel(&adev->mes.eop_gpu_obj[pipe],
|
||||
&adev->mes.eop_gpu_addr[pipe],
|
||||
NULL);
|
||||
|
||||
mes_v10_1_free_microcode(adev, pipe);
|
||||
amdgpu_ucode_release(&adev->mes.fw[pipe]);
|
||||
}
|
||||
|
||||
amdgpu_bo_free_kernel(&adev->gfx.kiq.ring.mqd_obj,
|
||||
|
@ -1229,6 +1137,22 @@ static int mes_v10_1_resume(void *handle)
|
|||
return amdgpu_mes_resume(adev);
|
||||
}
|
||||
|
||||
static int mes_v10_0_early_init(void *handle)
|
||||
{
|
||||
struct amdgpu_device *adev = (struct amdgpu_device *)handle;
|
||||
int pipe, r;
|
||||
|
||||
for (pipe = 0; pipe < AMDGPU_MAX_MES_PIPES; pipe++) {
|
||||
if (!adev->enable_mes_kiq && pipe == AMDGPU_MES_KIQ_PIPE)
|
||||
continue;
|
||||
r = amdgpu_mes_init_microcode(adev, pipe);
|
||||
if (r)
|
||||
return r;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int mes_v10_0_late_init(void *handle)
|
||||
{
|
||||
struct amdgpu_device *adev = (struct amdgpu_device *)handle;
|
||||
|
@ -1241,6 +1165,7 @@ static int mes_v10_0_late_init(void *handle)
|
|||
|
||||
static const struct amd_ip_funcs mes_v10_1_ip_funcs = {
|
||||
.name = "mes_v10_1",
|
||||
.early_init = mes_v10_0_early_init,
|
||||
.late_init = mes_v10_0_late_init,
|
||||
.sw_init = mes_v10_1_sw_init,
|
||||
.sw_fini = mes_v10_1_sw_fini,
|
||||
|
|
|
@ -453,84 +453,6 @@ static const struct amdgpu_mes_funcs mes_v11_0_funcs = {
|
|||
.misc_op = mes_v11_0_misc_op,
|
||||
};
|
||||
|
||||
static int mes_v11_0_init_microcode(struct amdgpu_device *adev,
|
||||
enum admgpu_mes_pipe pipe)
|
||||
{
|
||||
char fw_name[30];
|
||||
char ucode_prefix[30];
|
||||
int err;
|
||||
const struct mes_firmware_header_v1_0 *mes_hdr;
|
||||
struct amdgpu_firmware_info *info;
|
||||
|
||||
amdgpu_ucode_ip_version_decode(adev, GC_HWIP, ucode_prefix, sizeof(ucode_prefix));
|
||||
|
||||
if (pipe == AMDGPU_MES_SCHED_PIPE)
|
||||
snprintf(fw_name, sizeof(fw_name), "amdgpu/%s_mes.bin",
|
||||
ucode_prefix);
|
||||
else
|
||||
snprintf(fw_name, sizeof(fw_name), "amdgpu/%s_mes1.bin",
|
||||
ucode_prefix);
|
||||
|
||||
err = request_firmware(&adev->mes.fw[pipe], fw_name, adev->dev);
|
||||
if (err)
|
||||
return err;
|
||||
|
||||
err = amdgpu_ucode_validate(adev->mes.fw[pipe]);
|
||||
if (err) {
|
||||
release_firmware(adev->mes.fw[pipe]);
|
||||
adev->mes.fw[pipe] = NULL;
|
||||
return err;
|
||||
}
|
||||
|
||||
mes_hdr = (const struct mes_firmware_header_v1_0 *)
|
||||
adev->mes.fw[pipe]->data;
|
||||
adev->mes.ucode_fw_version[pipe] =
|
||||
le32_to_cpu(mes_hdr->mes_ucode_version);
|
||||
adev->mes.ucode_fw_version[pipe] =
|
||||
le32_to_cpu(mes_hdr->mes_ucode_data_version);
|
||||
adev->mes.uc_start_addr[pipe] =
|
||||
le32_to_cpu(mes_hdr->mes_uc_start_addr_lo) |
|
||||
((uint64_t)(le32_to_cpu(mes_hdr->mes_uc_start_addr_hi)) << 32);
|
||||
adev->mes.data_start_addr[pipe] =
|
||||
le32_to_cpu(mes_hdr->mes_data_start_addr_lo) |
|
||||
((uint64_t)(le32_to_cpu(mes_hdr->mes_data_start_addr_hi)) << 32);
|
||||
|
||||
if (adev->firmware.load_type == AMDGPU_FW_LOAD_PSP) {
|
||||
int ucode, ucode_data;
|
||||
|
||||
if (pipe == AMDGPU_MES_SCHED_PIPE) {
|
||||
ucode = AMDGPU_UCODE_ID_CP_MES;
|
||||
ucode_data = AMDGPU_UCODE_ID_CP_MES_DATA;
|
||||
} else {
|
||||
ucode = AMDGPU_UCODE_ID_CP_MES1;
|
||||
ucode_data = AMDGPU_UCODE_ID_CP_MES1_DATA;
|
||||
}
|
||||
|
||||
info = &adev->firmware.ucode[ucode];
|
||||
info->ucode_id = ucode;
|
||||
info->fw = adev->mes.fw[pipe];
|
||||
adev->firmware.fw_size +=
|
||||
roundup2(le32_to_cpu(mes_hdr->mes_ucode_size_bytes),
|
||||
PAGE_SIZE);
|
||||
|
||||
info = &adev->firmware.ucode[ucode_data];
|
||||
info->ucode_id = ucode_data;
|
||||
info->fw = adev->mes.fw[pipe];
|
||||
adev->firmware.fw_size +=
|
||||
roundup2(le32_to_cpu(mes_hdr->mes_ucode_data_size_bytes),
|
||||
PAGE_SIZE);
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static void mes_v11_0_free_microcode(struct amdgpu_device *adev,
|
||||
enum admgpu_mes_pipe pipe)
|
||||
{
|
||||
release_firmware(adev->mes.fw[pipe]);
|
||||
adev->mes.fw[pipe] = NULL;
|
||||
}
|
||||
|
||||
static int mes_v11_0_allocate_ucode_buffer(struct amdgpu_device *adev,
|
||||
enum admgpu_mes_pipe pipe)
|
||||
{
|
||||
|
@ -1098,10 +1020,6 @@ static int mes_v11_0_sw_init(void *handle)
|
|||
if (!adev->enable_mes_kiq && pipe == AMDGPU_MES_KIQ_PIPE)
|
||||
continue;
|
||||
|
||||
r = mes_v11_0_init_microcode(adev, pipe);
|
||||
if (r)
|
||||
return r;
|
||||
|
||||
r = mes_v11_0_allocate_eop_buf(adev, pipe);
|
||||
if (r)
|
||||
return r;
|
||||
|
@ -1138,8 +1056,7 @@ static int mes_v11_0_sw_fini(void *handle)
|
|||
amdgpu_bo_free_kernel(&adev->mes.eop_gpu_obj[pipe],
|
||||
&adev->mes.eop_gpu_addr[pipe],
|
||||
NULL);
|
||||
|
||||
mes_v11_0_free_microcode(adev, pipe);
|
||||
amdgpu_ucode_release(&adev->mes.fw[pipe]);
|
||||
}
|
||||
|
||||
amdgpu_bo_free_kernel(&adev->gfx.kiq.ring.mqd_obj,
|
||||
|
@ -1334,6 +1251,22 @@ static int mes_v11_0_resume(void *handle)
|
|||
return amdgpu_mes_resume(adev);
|
||||
}
|
||||
|
||||
static int mes_v11_0_early_init(void *handle)
|
||||
{
|
||||
struct amdgpu_device *adev = (struct amdgpu_device *)handle;
|
||||
int pipe, r;
|
||||
|
||||
for (pipe = 0; pipe < AMDGPU_MAX_MES_PIPES; pipe++) {
|
||||
if (!adev->enable_mes_kiq && pipe == AMDGPU_MES_KIQ_PIPE)
|
||||
continue;
|
||||
r = amdgpu_mes_init_microcode(adev, pipe);
|
||||
if (r)
|
||||
return r;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int mes_v11_0_late_init(void *handle)
|
||||
{
|
||||
struct amdgpu_device *adev = (struct amdgpu_device *)handle;
|
||||
|
@ -1348,6 +1281,7 @@ static int mes_v11_0_late_init(void *handle)
|
|||
|
||||
static const struct amd_ip_funcs mes_v11_0_ip_funcs = {
|
||||
.name = "mes_v11_0",
|
||||
.early_init = mes_v11_0_early_init,
|
||||
.late_init = mes_v11_0_late_init,
|
||||
.sw_init = mes_v11_0_sw_init,
|
||||
.sw_fini = mes_v11_0_sw_fini,
|
||||
|
|
|
@ -1941,9 +1941,11 @@ static int sdma_v4_0_hw_fini(void *handle)
|
|||
return 0;
|
||||
}
|
||||
|
||||
for (i = 0; i < adev->sdma.num_instances; i++) {
|
||||
amdgpu_irq_put(adev, &adev->sdma.ecc_irq,
|
||||
AMDGPU_SDMA_IRQ_INSTANCE0 + i);
|
||||
if (amdgpu_ras_is_supported(adev, AMDGPU_RAS_BLOCK__SDMA)) {
|
||||
for (i = 0; i < adev->sdma.num_instances; i++) {
|
||||
amdgpu_irq_put(adev, &adev->sdma.ecc_irq,
|
||||
AMDGPU_SDMA_IRQ_INSTANCE0 + i);
|
||||
}
|
||||
}
|
||||
|
||||
sdma_v4_0_ctx_switch_enable(adev, false);
|
||||
|
|
|
@ -715,7 +715,7 @@ static int soc21_common_early_init(void *handle)
|
|||
AMD_PG_SUPPORT_VCN_DPG |
|
||||
AMD_PG_SUPPORT_GFX_PG |
|
||||
AMD_PG_SUPPORT_JPEG;
|
||||
adev->external_rev_id = adev->rev_id + 0x1;
|
||||
adev->external_rev_id = adev->rev_id + 0x80;
|
||||
break;
|
||||
|
||||
default:
|
||||
|
|
|
@ -39,6 +39,7 @@
|
|||
#include "dc/dc_edid_parser.h"
|
||||
#include "dc/dc_stat.h"
|
||||
#include "amdgpu_dm_trace.h"
|
||||
#include "dc/inc/dc_link_ddc.h"
|
||||
|
||||
#include "vid.h"
|
||||
#include "amdgpu.h"
|
||||
|
@ -2256,6 +2257,14 @@ static void s3_handle_mst(struct drm_device *dev, bool suspend)
|
|||
if (suspend) {
|
||||
drm_dp_mst_topology_mgr_suspend(mgr);
|
||||
} else {
|
||||
/* if extended timeout is supported in hardware,
|
||||
* default to LTTPR timeout (3.2ms) first as a W/A for DP link layer
|
||||
* CTS 4.2.1.1 regression introduced by CTS specs requirement update.
|
||||
*/
|
||||
dc_link_aux_try_to_configure_timeout(aconnector->dc_link->ddc, LINK_AUX_DEFAULT_LTTPR_TIMEOUT_PERIOD);
|
||||
if (!dp_is_lttpr_present(aconnector->dc_link))
|
||||
dc_link_aux_try_to_configure_timeout(aconnector->dc_link->ddc, LINK_AUX_DEFAULT_TIMEOUT_PERIOD);
|
||||
|
||||
ret = drm_dp_mst_topology_mgr_resume(mgr, true);
|
||||
if (ret < 0) {
|
||||
dm_helpers_dp_mst_stop_top_mgr(aconnector->dc_link->ctx,
|
||||
|
@ -7588,6 +7597,13 @@ static void amdgpu_dm_commit_cursors(struct drm_atomic_state *state)
|
|||
handle_cursor_update(plane, old_plane_state);
|
||||
}
|
||||
|
||||
static inline uint32_t get_mem_type(struct drm_framebuffer *fb)
|
||||
{
|
||||
struct amdgpu_bo *abo = gem_to_amdgpu_bo(fb->obj[0]);
|
||||
|
||||
return abo->tbo.resource ? abo->tbo.resource->mem_type : 0;
|
||||
}
|
||||
|
||||
static void amdgpu_dm_commit_planes(struct drm_atomic_state *state,
|
||||
struct dc_state *dc_state,
|
||||
struct drm_device *dev,
|
||||
|
@ -7661,6 +7677,8 @@ static void amdgpu_dm_commit_planes(struct drm_atomic_state *state,
|
|||
continue;
|
||||
|
||||
dc_plane = dm_new_plane_state->dc_state;
|
||||
if (!dc_plane)
|
||||
continue;
|
||||
|
||||
bundle->surface_updates[planes_count].surface = dc_plane;
|
||||
if (new_pcrtc_state->color_mgmt_changed) {
|
||||
|
@ -7705,11 +7723,13 @@ static void amdgpu_dm_commit_planes(struct drm_atomic_state *state,
|
|||
|
||||
/*
|
||||
* Only allow immediate flips for fast updates that don't
|
||||
* change FB pitch, DCC state, rotation or mirroing.
|
||||
* change memory domain, FB pitch, DCC state, rotation or
|
||||
* mirroring.
|
||||
*/
|
||||
bundle->flip_addrs[planes_count].flip_immediate =
|
||||
crtc->state->async_flip &&
|
||||
acrtc_state->update_type == UPDATE_TYPE_FAST;
|
||||
acrtc_state->update_type == UPDATE_TYPE_FAST &&
|
||||
get_mem_type(old_plane_state->fb) == get_mem_type(fb);
|
||||
|
||||
timestamp_ns = ktime_get_ns();
|
||||
bundle->flip_addrs[planes_count].flip_timestamp_in_us = div_u64(timestamp_ns, 1000);
|
||||
|
@ -9203,8 +9223,9 @@ static int dm_update_plane_state(struct dc *dc,
|
|||
return -EINVAL;
|
||||
}
|
||||
|
||||
if (dm_old_plane_state->dc_state)
|
||||
dc_plane_state_release(dm_old_plane_state->dc_state);
|
||||
|
||||
dc_plane_state_release(dm_old_plane_state->dc_state);
|
||||
dm_new_plane_state->dc_state = NULL;
|
||||
|
||||
*lock_and_validation_needed = true;
|
||||
|
@ -9741,6 +9762,7 @@ static int amdgpu_dm_atomic_check(struct drm_device *dev,
|
|||
ret = compute_mst_dsc_configs_for_state(state, dm_state->context, vars);
|
||||
if (ret) {
|
||||
DRM_DEBUG_DRIVER("compute_mst_dsc_configs_for_state() failed\n");
|
||||
ret = -EINVAL;
|
||||
goto fail;
|
||||
}
|
||||
|
||||
|
|
|
@ -1368,6 +1368,7 @@ int pre_validate_dsc(struct drm_atomic_state *state,
|
|||
ret = pre_compute_mst_dsc_configs_for_state(state, local_dc_state, vars);
|
||||
if (ret != 0) {
|
||||
DRM_INFO_ONCE("pre_compute_mst_dsc_configs_for_state() failed\n");
|
||||
ret = -EINVAL;
|
||||
goto clean_exit;
|
||||
}
|
||||
|
||||
|
|
|
@ -333,8 +333,8 @@ void dcn31_smu_set_zstate_support(struct clk_mgr_internal *clk_mgr, enum dcn_zst
|
|||
(support == DCN_ZSTATE_SUPPORT_ALLOW_Z10_ONLY))
|
||||
support = DCN_ZSTATE_SUPPORT_DISALLOW;
|
||||
|
||||
|
||||
if (support == DCN_ZSTATE_SUPPORT_ALLOW_Z10_ONLY)
|
||||
if (support == DCN_ZSTATE_SUPPORT_ALLOW_Z10_ONLY ||
|
||||
support == DCN_ZSTATE_SUPPORT_ALLOW_Z8_Z10_ONLY)
|
||||
param = 1;
|
||||
else
|
||||
param = 0;
|
||||
|
|
|
@ -349,8 +349,6 @@ void dcn314_smu_set_zstate_support(struct clk_mgr_internal *clk_mgr, enum dcn_zs
|
|||
if (!clk_mgr->smu_present)
|
||||
return;
|
||||
|
||||
// Arg[15:0] = 8/9/0 for Z8/Z9/disallow -> existing bits
|
||||
// Arg[16] = Disallow Z9 -> new bit
|
||||
switch (support) {
|
||||
|
||||
case DCN_ZSTATE_SUPPORT_ALLOW:
|
||||
|
@ -369,6 +367,16 @@ void dcn314_smu_set_zstate_support(struct clk_mgr_internal *clk_mgr, enum dcn_zs
|
|||
param = (1 << 10);
|
||||
break;
|
||||
|
||||
case DCN_ZSTATE_SUPPORT_ALLOW_Z8_Z10_ONLY:
|
||||
msg_id = VBIOSSMC_MSG_AllowZstatesEntry;
|
||||
param = (1 << 10) | (1 << 8);
|
||||
break;
|
||||
|
||||
case DCN_ZSTATE_SUPPORT_ALLOW_Z8_ONLY:
|
||||
msg_id = VBIOSSMC_MSG_AllowZstatesEntry;
|
||||
param = (1 << 8);
|
||||
break;
|
||||
|
||||
default: //DCN_ZSTATE_SUPPORT_UNKNOWN
|
||||
msg_id = VBIOSSMC_MSG_AllowZstatesEntry;
|
||||
param = 0;
|
||||
|
|
|
@ -756,6 +756,8 @@ void dcn32_clk_mgr_construct(
|
|||
struct pp_smu_funcs *pp_smu,
|
||||
struct dccg *dccg)
|
||||
{
|
||||
struct clk_log_info log_info = {0};
|
||||
|
||||
clk_mgr->base.ctx = ctx;
|
||||
clk_mgr->base.funcs = &dcn32_funcs;
|
||||
if (ASICREV_IS_GC_11_0_2(clk_mgr->base.ctx->asic_id.hw_internal_rev)) {
|
||||
|
@ -789,6 +791,7 @@ void dcn32_clk_mgr_construct(
|
|||
clk_mgr->base.clks.ref_dtbclk_khz = 268750;
|
||||
}
|
||||
|
||||
|
||||
/* integer part is now VCO frequency in kHz */
|
||||
clk_mgr->base.dentist_vco_freq_khz = dcn32_get_vco_frequency_from_reg(clk_mgr);
|
||||
|
||||
|
@ -796,6 +799,8 @@ void dcn32_clk_mgr_construct(
|
|||
if (clk_mgr->base.dentist_vco_freq_khz == 0)
|
||||
clk_mgr->base.dentist_vco_freq_khz = 4300000; /* Updated as per HW docs */
|
||||
|
||||
dcn32_dump_clk_registers(&clk_mgr->base.boot_snapshot, &clk_mgr->base, &log_info);
|
||||
|
||||
if (ctx->dc->debug.disable_dtb_ref_clk_switch &&
|
||||
clk_mgr->base.clks.ref_dtbclk_khz != clk_mgr->base.boot_snapshot.dtbclk) {
|
||||
clk_mgr->base.clks.ref_dtbclk_khz = clk_mgr->base.boot_snapshot.dtbclk;
|
||||
|
|
|
@ -3381,7 +3381,7 @@ bool dc_link_setup_psr(struct dc_link *link,
|
|||
case FAMILY_YELLOW_CARP:
|
||||
case AMDGPU_FAMILY_GC_10_3_6:
|
||||
case AMDGPU_FAMILY_GC_11_0_1:
|
||||
if (dc->debug.disable_z10)
|
||||
if (dc->debug.disable_z10 || dc->debug.psr_skip_crtc_disable)
|
||||
psr_context->psr_level.bits.SKIP_CRTC_DISABLE = true;
|
||||
break;
|
||||
default:
|
||||
|
|
|
@ -1707,6 +1707,9 @@ bool dc_remove_plane_from_context(
|
|||
struct dc_stream_status *stream_status = NULL;
|
||||
struct resource_pool *pool = dc->res_pool;
|
||||
|
||||
if (!plane_state)
|
||||
return true;
|
||||
|
||||
for (i = 0; i < context->stream_count; i++)
|
||||
if (context->streams[i] == stream) {
|
||||
stream_status = &context->stream_status[i];
|
||||
|
|
|
@ -491,6 +491,8 @@ enum dcn_pwr_state {
|
|||
enum dcn_zstate_support_state {
|
||||
DCN_ZSTATE_SUPPORT_UNKNOWN,
|
||||
DCN_ZSTATE_SUPPORT_ALLOW,
|
||||
DCN_ZSTATE_SUPPORT_ALLOW_Z8_ONLY,
|
||||
DCN_ZSTATE_SUPPORT_ALLOW_Z8_Z10_ONLY,
|
||||
DCN_ZSTATE_SUPPORT_ALLOW_Z10_ONLY,
|
||||
DCN_ZSTATE_SUPPORT_DISALLOW,
|
||||
};
|
||||
|
@ -764,7 +766,6 @@ struct dc_debug_options {
|
|||
bool disable_mem_low_power;
|
||||
bool pstate_enabled;
|
||||
bool disable_dmcu;
|
||||
bool disable_psr;
|
||||
bool force_abm_enable;
|
||||
bool disable_stereo_support;
|
||||
bool vsr_support;
|
||||
|
@ -780,6 +781,7 @@ struct dc_debug_options {
|
|||
unsigned int force_odm_combine; //bit vector based on otg inst
|
||||
unsigned int seamless_boot_odm_combine;
|
||||
unsigned int force_odm_combine_4to1; //bit vector based on otg inst
|
||||
int minimum_z8_residency_time;
|
||||
bool disable_z9_mpc;
|
||||
unsigned int force_fclk_khz;
|
||||
bool enable_tri_buf;
|
||||
|
@ -828,6 +830,7 @@ struct dc_debug_options {
|
|||
int crb_alloc_policy_min_disp_count;
|
||||
bool disable_z10;
|
||||
bool enable_z9_disable_interface;
|
||||
bool psr_skip_crtc_disable;
|
||||
union dpia_debug_options dpia_debug;
|
||||
bool disable_fixed_vs_aux_timeout_wa;
|
||||
bool force_disable_subvp;
|
||||
|
|
|
@ -117,7 +117,7 @@ struct psr_settings {
|
|||
* Add a struct dc_panel_config under dc_link
|
||||
*/
|
||||
struct dc_panel_config {
|
||||
// extra panel power sequence parameters
|
||||
/* extra panel power sequence parameters */
|
||||
struct pps {
|
||||
unsigned int extra_t3_ms;
|
||||
unsigned int extra_t7_ms;
|
||||
|
@ -127,13 +127,21 @@ struct dc_panel_config {
|
|||
unsigned int extra_t12_ms;
|
||||
unsigned int extra_post_OUI_ms;
|
||||
} pps;
|
||||
// ABM
|
||||
/* PSR */
|
||||
struct psr {
|
||||
bool disable_psr;
|
||||
bool disallow_psrsu;
|
||||
bool rc_disable;
|
||||
bool rc_allow_static_screen;
|
||||
bool rc_allow_fullscreen_VPB;
|
||||
} psr;
|
||||
/* ABM */
|
||||
struct varib {
|
||||
unsigned int varibright_feature_enable;
|
||||
unsigned int def_varibright_level;
|
||||
unsigned int abm_config_setting;
|
||||
} varib;
|
||||
// edp DSC
|
||||
/* edp DSC */
|
||||
struct dsc {
|
||||
bool disable_dsc_edp;
|
||||
unsigned int force_dsc_edp_policy;
|
||||
|
|
|
@ -726,11 +726,15 @@ void dcn10_hubp_pg_control(
|
|||
}
|
||||
}
|
||||
|
||||
static void power_on_plane(
|
||||
static void power_on_plane_resources(
|
||||
struct dce_hwseq *hws,
|
||||
int plane_id)
|
||||
{
|
||||
DC_LOGGER_INIT(hws->ctx->logger);
|
||||
|
||||
if (hws->funcs.dpp_root_clock_control)
|
||||
hws->funcs.dpp_root_clock_control(hws, plane_id, true);
|
||||
|
||||
if (REG(DC_IP_REQUEST_CNTL)) {
|
||||
REG_SET(DC_IP_REQUEST_CNTL, 0,
|
||||
IP_REQUEST_EN, 1);
|
||||
|
@ -1237,11 +1241,15 @@ void dcn10_plane_atomic_power_down(struct dc *dc,
|
|||
hws->funcs.hubp_pg_control(hws, hubp->inst, false);
|
||||
|
||||
dpp->funcs->dpp_reset(dpp);
|
||||
|
||||
REG_SET(DC_IP_REQUEST_CNTL, 0,
|
||||
IP_REQUEST_EN, 0);
|
||||
DC_LOG_DEBUG(
|
||||
"Power gated front end %d\n", hubp->inst);
|
||||
}
|
||||
|
||||
if (hws->funcs.dpp_root_clock_control)
|
||||
hws->funcs.dpp_root_clock_control(hws, dpp->inst, false);
|
||||
}
|
||||
|
||||
/* disable HW used by plane.
|
||||
|
@ -2450,7 +2458,7 @@ static void dcn10_enable_plane(
|
|||
|
||||
undo_DEGVIDCN10_253_wa(dc);
|
||||
|
||||
power_on_plane(dc->hwseq,
|
||||
power_on_plane_resources(dc->hwseq,
|
||||
pipe_ctx->plane_res.hubp->inst);
|
||||
|
||||
/* enable DCFCLK current DCHUB */
|
||||
|
@ -3369,7 +3377,9 @@ static bool dcn10_can_pipe_disable_cursor(struct pipe_ctx *pipe_ctx)
|
|||
for (test_pipe = pipe_ctx->top_pipe; test_pipe;
|
||||
test_pipe = test_pipe->top_pipe) {
|
||||
// Skip invisible layer and pipe-split plane on same layer
|
||||
if (!test_pipe->plane_state->visible || test_pipe->plane_state->layer_index == cur_layer)
|
||||
if (!test_pipe->plane_state ||
|
||||
!test_pipe->plane_state->visible ||
|
||||
test_pipe->plane_state->layer_index == cur_layer)
|
||||
continue;
|
||||
|
||||
r2 = test_pipe->plane_res.scl_data.recout;
|
||||
|
|
|
@ -1087,11 +1087,15 @@ void dcn20_blank_pixel_data(
|
|||
}
|
||||
|
||||
|
||||
static void dcn20_power_on_plane(
|
||||
static void dcn20_power_on_plane_resources(
|
||||
struct dce_hwseq *hws,
|
||||
struct pipe_ctx *pipe_ctx)
|
||||
{
|
||||
DC_LOGGER_INIT(hws->ctx->logger);
|
||||
|
||||
if (hws->funcs.dpp_root_clock_control)
|
||||
hws->funcs.dpp_root_clock_control(hws, pipe_ctx->plane_res.dpp->inst, true);
|
||||
|
||||
if (REG(DC_IP_REQUEST_CNTL)) {
|
||||
REG_SET(DC_IP_REQUEST_CNTL, 0,
|
||||
IP_REQUEST_EN, 1);
|
||||
|
@ -1115,7 +1119,7 @@ static void dcn20_enable_plane(struct dc *dc, struct pipe_ctx *pipe_ctx,
|
|||
//if (dc->debug.sanity_checks) {
|
||||
// dcn10_verify_allow_pstate_change_high(dc);
|
||||
//}
|
||||
dcn20_power_on_plane(dc->hwseq, pipe_ctx);
|
||||
dcn20_power_on_plane_resources(dc->hwseq, pipe_ctx);
|
||||
|
||||
/* enable DCFCLK current DCHUB */
|
||||
pipe_ctx->plane_res.hubp->funcs->hubp_clk_cntl(pipe_ctx->plane_res.hubp, true);
|
||||
|
|
|
@ -671,12 +671,15 @@ static const struct dc_debug_options debug_defaults_diags = {
|
|||
.disable_pplib_wm_range = true,
|
||||
.disable_stutter = true,
|
||||
.disable_48mhz_pwrdwn = true,
|
||||
.disable_psr = true,
|
||||
.enable_tri_buf = true,
|
||||
.use_max_lb = true
|
||||
};
|
||||
|
||||
static const struct dc_panel_config panel_config_defaults = {
|
||||
.psr = {
|
||||
.disable_psr = false,
|
||||
.disallow_psrsu = false,
|
||||
},
|
||||
.ilr = {
|
||||
.optimize_edp_link_rate = true,
|
||||
},
|
||||
|
|
|
@ -723,7 +723,6 @@ static const struct dc_debug_options debug_defaults_drv = {
|
|||
.underflow_assert_delay_us = 0xFFFFFFFF,
|
||||
.dwb_fi_phase = -1, // -1 = disable,
|
||||
.dmub_command_table = true,
|
||||
.disable_psr = false,
|
||||
.use_max_lb = true,
|
||||
.exit_idle_opt_for_cursor_updates = true
|
||||
};
|
||||
|
@ -742,11 +741,17 @@ static const struct dc_debug_options debug_defaults_diags = {
|
|||
.scl_reset_length10 = true,
|
||||
.dwb_fi_phase = -1, // -1 = disable
|
||||
.dmub_command_table = true,
|
||||
.disable_psr = true,
|
||||
.enable_tri_buf = true,
|
||||
.use_max_lb = true
|
||||
};
|
||||
|
||||
static const struct dc_panel_config panel_config_defaults = {
|
||||
.psr = {
|
||||
.disable_psr = false,
|
||||
.disallow_psrsu = false,
|
||||
},
|
||||
};
|
||||
|
||||
static void dcn30_dpp_destroy(struct dpp **dpp)
|
||||
{
|
||||
kfree(TO_DCN20_DPP(*dpp));
|
||||
|
@ -2214,6 +2219,11 @@ void dcn30_update_bw_bounding_box(struct dc *dc, struct clk_bw_params *bw_params
|
|||
}
|
||||
}
|
||||
|
||||
static void dcn30_get_panel_config_defaults(struct dc_panel_config *panel_config)
|
||||
{
|
||||
*panel_config = panel_config_defaults;
|
||||
}
|
||||
|
||||
static const struct resource_funcs dcn30_res_pool_funcs = {
|
||||
.destroy = dcn30_destroy_resource_pool,
|
||||
.link_enc_create = dcn30_link_encoder_create,
|
||||
|
@ -2233,6 +2243,7 @@ static const struct resource_funcs dcn30_res_pool_funcs = {
|
|||
.release_post_bldn_3dlut = dcn30_release_post_bldn_3dlut,
|
||||
.update_bw_bounding_box = dcn30_update_bw_bounding_box,
|
||||
.patch_unknown_plane_state = dcn20_patch_unknown_plane_state,
|
||||
.get_panel_config_defaults = dcn30_get_panel_config_defaults,
|
||||
};
|
||||
|
||||
#define CTX ctx
|
||||
|
|
|
@ -112,10 +112,16 @@ static const struct dc_debug_options debug_defaults_diags = {
|
|||
.dwb_fi_phase = -1, // -1 = disable
|
||||
.dmub_command_table = true,
|
||||
.enable_tri_buf = true,
|
||||
.disable_psr = true,
|
||||
.use_max_lb = true
|
||||
};
|
||||
|
||||
static const struct dc_panel_config panel_config_defaults = {
|
||||
.psr = {
|
||||
.disable_psr = false,
|
||||
.disallow_psrsu = false,
|
||||
},
|
||||
};
|
||||
|
||||
enum dcn302_clk_src_array_id {
|
||||
DCN302_CLK_SRC_PLL0,
|
||||
DCN302_CLK_SRC_PLL1,
|
||||
|
@ -1132,6 +1138,11 @@ void dcn302_update_bw_bounding_box(struct dc *dc, struct clk_bw_params *bw_param
|
|||
DC_FP_END();
|
||||
}
|
||||
|
||||
static void dcn302_get_panel_config_defaults(struct dc_panel_config *panel_config)
|
||||
{
|
||||
*panel_config = panel_config_defaults;
|
||||
}
|
||||
|
||||
static struct resource_funcs dcn302_res_pool_funcs = {
|
||||
.destroy = dcn302_destroy_resource_pool,
|
||||
.link_enc_create = dcn302_link_encoder_create,
|
||||
|
@ -1151,6 +1162,7 @@ static struct resource_funcs dcn302_res_pool_funcs = {
|
|||
.release_post_bldn_3dlut = dcn30_release_post_bldn_3dlut,
|
||||
.update_bw_bounding_box = dcn302_update_bw_bounding_box,
|
||||
.patch_unknown_plane_state = dcn20_patch_unknown_plane_state,
|
||||
.get_panel_config_defaults = dcn302_get_panel_config_defaults,
|
||||
};
|
||||
|
||||
static struct dc_cap_funcs cap_funcs = {
|
||||
|
|
|
@ -96,7 +96,13 @@ static const struct dc_debug_options debug_defaults_diags = {
|
|||
.dwb_fi_phase = -1, // -1 = disable
|
||||
.dmub_command_table = true,
|
||||
.enable_tri_buf = true,
|
||||
.disable_psr = true,
|
||||
};
|
||||
|
||||
static const struct dc_panel_config panel_config_defaults = {
|
||||
.psr = {
|
||||
.disable_psr = false,
|
||||
.disallow_psrsu = false,
|
||||
},
|
||||
};
|
||||
|
||||
enum dcn303_clk_src_array_id {
|
||||
|
@ -1055,6 +1061,10 @@ static void dcn303_destroy_resource_pool(struct resource_pool **pool)
|
|||
*pool = NULL;
|
||||
}
|
||||
|
||||
static void dcn303_get_panel_config_defaults(struct dc_panel_config *panel_config)
|
||||
{
|
||||
*panel_config = panel_config_defaults;
|
||||
}
|
||||
|
||||
void dcn303_update_bw_bounding_box(struct dc *dc, struct clk_bw_params *bw_params)
|
||||
{
|
||||
|
@ -1082,6 +1092,7 @@ static struct resource_funcs dcn303_res_pool_funcs = {
|
|||
.release_post_bldn_3dlut = dcn30_release_post_bldn_3dlut,
|
||||
.update_bw_bounding_box = dcn303_update_bw_bounding_box,
|
||||
.patch_unknown_plane_state = dcn20_patch_unknown_plane_state,
|
||||
.get_panel_config_defaults = dcn303_get_panel_config_defaults,
|
||||
};
|
||||
|
||||
static struct dc_cap_funcs cap_funcs = {
|
||||
|
|
|
@ -66,17 +66,8 @@ void dccg31_update_dpp_dto(struct dccg *dccg, int dpp_inst, int req_dppclk)
|
|||
REG_UPDATE(DPPCLK_DTO_CTRL,
|
||||
DPPCLK_DTO_ENABLE[dpp_inst], 1);
|
||||
} else {
|
||||
//DTO must be enabled to generate a 0Hz clock output
|
||||
if (dccg->ctx->dc->debug.root_clock_optimization.bits.dpp) {
|
||||
REG_UPDATE(DPPCLK_DTO_CTRL,
|
||||
DPPCLK_DTO_ENABLE[dpp_inst], 1);
|
||||
REG_SET_2(DPPCLK_DTO_PARAM[dpp_inst], 0,
|
||||
DPPCLK0_DTO_PHASE, 0,
|
||||
DPPCLK0_DTO_MODULO, 1);
|
||||
} else {
|
||||
REG_UPDATE(DPPCLK_DTO_CTRL,
|
||||
DPPCLK_DTO_ENABLE[dpp_inst], 0);
|
||||
}
|
||||
REG_UPDATE(DPPCLK_DTO_CTRL,
|
||||
DPPCLK_DTO_ENABLE[dpp_inst], 0);
|
||||
}
|
||||
dccg->pipe_dppclk_khz[dpp_inst] = req_dppclk;
|
||||
}
|
||||
|
|
|
@ -911,6 +911,10 @@ static const struct dc_debug_options debug_defaults_diags = {
|
|||
};
|
||||
|
||||
static const struct dc_panel_config panel_config_defaults = {
|
||||
.psr = {
|
||||
.disable_psr = false,
|
||||
.disallow_psrsu = false,
|
||||
},
|
||||
.ilr = {
|
||||
.optimize_edp_link_rate = true,
|
||||
},
|
||||
|
|
|
@ -289,8 +289,31 @@ static void dccg314_set_valid_pixel_rate(
|
|||
dccg314_set_dtbclk_dto(dccg, &dto_params);
|
||||
}
|
||||
|
||||
static void dccg314_dpp_root_clock_control(
|
||||
struct dccg *dccg,
|
||||
unsigned int dpp_inst,
|
||||
bool clock_on)
|
||||
{
|
||||
struct dcn_dccg *dccg_dcn = TO_DCN_DCCG(dccg);
|
||||
|
||||
if (clock_on) {
|
||||
/* turn off the DTO and leave phase/modulo at max */
|
||||
REG_UPDATE(DPPCLK_DTO_CTRL, DPPCLK_DTO_ENABLE[dpp_inst], 0);
|
||||
REG_SET_2(DPPCLK_DTO_PARAM[dpp_inst], 0,
|
||||
DPPCLK0_DTO_PHASE, 0xFF,
|
||||
DPPCLK0_DTO_MODULO, 0xFF);
|
||||
} else {
|
||||
/* turn on the DTO to generate a 0hz clock */
|
||||
REG_UPDATE(DPPCLK_DTO_CTRL, DPPCLK_DTO_ENABLE[dpp_inst], 1);
|
||||
REG_SET_2(DPPCLK_DTO_PARAM[dpp_inst], 0,
|
||||
DPPCLK0_DTO_PHASE, 0,
|
||||
DPPCLK0_DTO_MODULO, 1);
|
||||
}
|
||||
}
|
||||
|
||||
static const struct dccg_funcs dccg314_funcs = {
|
||||
.update_dpp_dto = dccg31_update_dpp_dto,
|
||||
.dpp_root_clock_control = dccg314_dpp_root_clock_control,
|
||||
.get_dccg_ref_freq = dccg31_get_dccg_ref_freq,
|
||||
.dccg_init = dccg31_init,
|
||||
.set_dpstreamclk = dccg314_set_dpstreamclk,
|
||||
|
|
|
@ -392,6 +392,16 @@ void dcn314_set_pixels_per_cycle(struct pipe_ctx *pipe_ctx)
|
|||
pix_per_cycle);
|
||||
}
|
||||
|
||||
void dcn314_dpp_root_clock_control(struct dce_hwseq *hws, unsigned int dpp_inst, bool clock_on)
|
||||
{
|
||||
if (!hws->ctx->dc->debug.root_clock_optimization.bits.dpp)
|
||||
return;
|
||||
|
||||
if (hws->ctx->dc->res_pool->dccg->funcs->dpp_root_clock_control)
|
||||
hws->ctx->dc->res_pool->dccg->funcs->dpp_root_clock_control(
|
||||
hws->ctx->dc->res_pool->dccg, dpp_inst, clock_on);
|
||||
}
|
||||
|
||||
void dcn314_hubp_pg_control(struct dce_hwseq *hws, unsigned int hubp_inst, bool power_on)
|
||||
{
|
||||
struct dc_context *ctx = hws->ctx;
|
||||
|
|
|
@ -43,4 +43,6 @@ void dcn314_set_pixels_per_cycle(struct pipe_ctx *pipe_ctx);
|
|||
|
||||
void dcn314_hubp_pg_control(struct dce_hwseq *hws, unsigned int hubp_inst, bool power_on);
|
||||
|
||||
void dcn314_dpp_root_clock_control(struct dce_hwseq *hws, unsigned int dpp_inst, bool clock_on);
|
||||
|
||||
#endif /* __DC_HWSS_DCN314_H__ */
|
||||
|
|
|
@ -137,6 +137,7 @@ static const struct hwseq_private_funcs dcn314_private_funcs = {
|
|||
.plane_atomic_disable = dcn20_plane_atomic_disable,
|
||||
.plane_atomic_power_down = dcn10_plane_atomic_power_down,
|
||||
.enable_power_gating_plane = dcn314_enable_power_gating_plane,
|
||||
.dpp_root_clock_control = dcn314_dpp_root_clock_control,
|
||||
.hubp_pg_control = dcn314_hubp_pg_control,
|
||||
.program_all_writeback_pipes_in_tree = dcn30_program_all_writeback_pipes_in_tree,
|
||||
.update_odm = dcn314_update_odm,
|
||||
|
|
|
@ -884,6 +884,8 @@ static const struct dc_plane_cap plane_cap = {
|
|||
static const struct dc_debug_options debug_defaults_drv = {
|
||||
.disable_z10 = false,
|
||||
.enable_z9_disable_interface = true,
|
||||
.minimum_z8_residency_time = 2000,
|
||||
.psr_skip_crtc_disable = true,
|
||||
.disable_dmcu = true,
|
||||
.force_abm_enable = false,
|
||||
.timing_trace = false,
|
||||
|
@ -940,6 +942,10 @@ static const struct dc_debug_options debug_defaults_diags = {
|
|||
};
|
||||
|
||||
static const struct dc_panel_config panel_config_defaults = {
|
||||
.psr = {
|
||||
.disable_psr = false,
|
||||
.disallow_psrsu = false,
|
||||
},
|
||||
.ilr = {
|
||||
.optimize_edp_link_rate = true,
|
||||
},
|
||||
|
|
|
@ -907,6 +907,10 @@ static const struct dc_debug_options debug_defaults_diags = {
|
|||
};
|
||||
|
||||
static const struct dc_panel_config panel_config_defaults = {
|
||||
.psr = {
|
||||
.disable_psr = false,
|
||||
.disallow_psrsu = false,
|
||||
},
|
||||
.ilr = {
|
||||
.optimize_edp_link_rate = true,
|
||||
},
|
||||
|
|
|
@ -906,6 +906,10 @@ static const struct dc_debug_options debug_defaults_diags = {
|
|||
};
|
||||
|
||||
static const struct dc_panel_config panel_config_defaults = {
|
||||
.psr = {
|
||||
.disable_psr = false,
|
||||
.disallow_psrsu = false,
|
||||
},
|
||||
.ilr = {
|
||||
.optimize_edp_link_rate = true,
|
||||
},
|
||||
|
|
|
@ -984,6 +984,7 @@ void dcn32_init_hw(struct dc *dc)
|
|||
if (dc->ctx->dmub_srv) {
|
||||
dc_dmub_srv_query_caps_cmd(dc->ctx->dmub_srv->dmub);
|
||||
dc->caps.dmub_caps.psr = dc->ctx->dmub_srv->dmub->feature_caps.psr;
|
||||
dc->caps.dmub_caps.mclk_sw = dc->ctx->dmub_srv->dmub->feature_caps.fw_assisted_mclk_switch;
|
||||
}
|
||||
|
||||
/* Enable support for ODM and windowed MPO if policy flag is set */
|
||||
|
|
|
@ -1984,7 +1984,7 @@ int dcn32_populate_dml_pipes_from_context(
|
|||
// In general cases we want to keep the dram clock change requirement
|
||||
// (prefer configs that support MCLK switch). Only override to false
|
||||
// for SubVP
|
||||
if (subvp_in_use)
|
||||
if (context->bw_ctx.bw.dcn.clk.fw_based_mclk_switching || subvp_in_use)
|
||||
context->bw_ctx.dml.soc.dram_clock_change_requirement_final = false;
|
||||
else
|
||||
context->bw_ctx.dml.soc.dram_clock_change_requirement_final = true;
|
||||
|
@ -2037,6 +2037,14 @@ static struct resource_funcs dcn32_res_pool_funcs = {
|
|||
.remove_phantom_pipes = dcn32_remove_phantom_pipes,
|
||||
};
|
||||
|
||||
static uint32_t read_pipe_fuses(struct dc_context *ctx)
|
||||
{
|
||||
uint32_t value = REG_READ(CC_DC_PIPE_DIS);
|
||||
/* DCN32 support max 4 pipes */
|
||||
value = value & 0xf;
|
||||
return value;
|
||||
}
|
||||
|
||||
|
||||
static bool dcn32_resource_construct(
|
||||
uint8_t num_virtual_links,
|
||||
|
@ -2079,7 +2087,7 @@ static bool dcn32_resource_construct(
|
|||
pool->base.res_cap = &res_cap_dcn32;
|
||||
/* max number of pipes for ASIC before checking for pipe fuses */
|
||||
num_pipes = pool->base.res_cap->num_timing_generator;
|
||||
pipe_fuses = REG_READ(CC_DC_PIPE_DIS);
|
||||
pipe_fuses = read_pipe_fuses(ctx);
|
||||
|
||||
for (i = 0; i < pool->base.res_cap->num_timing_generator; i++)
|
||||
if (pipe_fuses & 1 << i)
|
||||
|
|
|
@ -1621,6 +1621,14 @@ static struct resource_funcs dcn321_res_pool_funcs = {
|
|||
.remove_phantom_pipes = dcn32_remove_phantom_pipes,
|
||||
};
|
||||
|
||||
static uint32_t read_pipe_fuses(struct dc_context *ctx)
|
||||
{
|
||||
uint32_t value = REG_READ(CC_DC_PIPE_DIS);
|
||||
/* DCN321 support max 4 pipes */
|
||||
value = value & 0xf;
|
||||
return value;
|
||||
}
|
||||
|
||||
|
||||
static bool dcn321_resource_construct(
|
||||
uint8_t num_virtual_links,
|
||||
|
@ -1663,7 +1671,7 @@ static bool dcn321_resource_construct(
|
|||
pool->base.res_cap = &res_cap_dcn321;
|
||||
/* max number of pipes for ASIC before checking for pipe fuses */
|
||||
num_pipes = pool->base.res_cap->num_timing_generator;
|
||||
pipe_fuses = REG_READ(CC_DC_PIPE_DIS);
|
||||
pipe_fuses = read_pipe_fuses(ctx);
|
||||
|
||||
for (i = 0; i < pool->base.res_cap->num_timing_generator; i++)
|
||||
if (pipe_fuses & 1 << i)
|
||||
|
|
|
@ -963,6 +963,8 @@ static enum dcn_zstate_support_state decide_zstate_support(struct dc *dc, struc
|
|||
* 2. single eDP, on link 0, 1 plane and stutter period > 5ms
|
||||
* Z10 only cases:
|
||||
* 1. single eDP, on link 0, 1 plane and stutter period >= 5ms
|
||||
* Z8 cases:
|
||||
* 1. stutter period sufficient
|
||||
* Zstate not allowed cases:
|
||||
* 1. Everything else
|
||||
*/
|
||||
|
@ -971,6 +973,9 @@ static enum dcn_zstate_support_state decide_zstate_support(struct dc *dc, struc
|
|||
else if (context->stream_count == 1 && context->streams[0]->signal == SIGNAL_TYPE_EDP) {
|
||||
struct dc_link *link = context->streams[0]->sink->link;
|
||||
struct dc_stream_status *stream_status = &context->stream_status[0];
|
||||
int minmum_z8_residency = dc->debug.minimum_z8_residency_time > 0 ? dc->debug.minimum_z8_residency_time : 1000;
|
||||
bool allow_z8 = context->bw_ctx.dml.vba.StutterPeriod > (double)minmum_z8_residency;
|
||||
bool is_pwrseq0 = link->link_index == 0;
|
||||
|
||||
if (dc_extended_blank_supported(dc)) {
|
||||
for (i = 0; i < dc->res_pool->pipe_count; i++) {
|
||||
|
@ -983,18 +988,20 @@ static enum dcn_zstate_support_state decide_zstate_support(struct dc *dc, struc
|
|||
}
|
||||
}
|
||||
}
|
||||
/* zstate only supported on PWRSEQ0 and when there's <2 planes*/
|
||||
if (link->link_index != 0 || stream_status->plane_count > 1)
|
||||
|
||||
/* Don't support multi-plane configurations */
|
||||
if (stream_status->plane_count > 1)
|
||||
return DCN_ZSTATE_SUPPORT_DISALLOW;
|
||||
|
||||
if (context->bw_ctx.dml.vba.StutterPeriod > 5000.0 || optimized_min_dst_y_next_start_us > 5000)
|
||||
if (is_pwrseq0 && (context->bw_ctx.dml.vba.StutterPeriod > 5000.0 || optimized_min_dst_y_next_start_us > 5000))
|
||||
return DCN_ZSTATE_SUPPORT_ALLOW;
|
||||
else if (link->psr_settings.psr_version == DC_PSR_VERSION_1 && !dc->debug.disable_psr)
|
||||
return DCN_ZSTATE_SUPPORT_ALLOW_Z10_ONLY;
|
||||
else if (is_pwrseq0 && link->psr_settings.psr_version == DC_PSR_VERSION_1 && !link->panel_config.psr.disable_psr)
|
||||
return allow_z8 ? DCN_ZSTATE_SUPPORT_ALLOW_Z8_Z10_ONLY : DCN_ZSTATE_SUPPORT_ALLOW_Z10_ONLY;
|
||||
else
|
||||
return DCN_ZSTATE_SUPPORT_DISALLOW;
|
||||
} else
|
||||
return allow_z8 ? DCN_ZSTATE_SUPPORT_ALLOW_Z8_ONLY : DCN_ZSTATE_SUPPORT_DISALLOW;
|
||||
} else {
|
||||
return DCN_ZSTATE_SUPPORT_DISALLOW;
|
||||
}
|
||||
}
|
||||
|
||||
void dcn20_calculate_dlg_params(
|
||||
|
|
|
@ -368,7 +368,9 @@ void dcn30_fpu_update_soc_for_wm_a(struct dc *dc, struct dc_state *context)
|
|||
dc_assert_fp_enabled();
|
||||
|
||||
if (dc->clk_mgr->bw_params->wm_table.nv_entries[WM_A].valid) {
|
||||
context->bw_ctx.dml.soc.dram_clock_change_latency_us = dc->clk_mgr->bw_params->wm_table.nv_entries[WM_A].dml_input.pstate_latency_us;
|
||||
if (!context->bw_ctx.bw.dcn.clk.fw_based_mclk_switching ||
|
||||
context->bw_ctx.dml.soc.dram_clock_change_latency_us == 0)
|
||||
context->bw_ctx.dml.soc.dram_clock_change_latency_us = dc->clk_mgr->bw_params->wm_table.nv_entries[WM_A].dml_input.pstate_latency_us;
|
||||
context->bw_ctx.dml.soc.sr_enter_plus_exit_time_us = dc->clk_mgr->bw_params->wm_table.nv_entries[WM_A].dml_input.sr_enter_plus_exit_time_us;
|
||||
context->bw_ctx.dml.soc.sr_exit_time_us = dc->clk_mgr->bw_params->wm_table.nv_entries[WM_A].dml_input.sr_exit_time_us;
|
||||
}
|
||||
|
@ -520,9 +522,21 @@ void dcn30_fpu_calculate_wm_and_dlg(
|
|||
pipe_idx++;
|
||||
}
|
||||
|
||||
DC_FP_START();
|
||||
// WA: restrict FPO to use first non-strobe mode (NV24 BW issue)
|
||||
if (context->bw_ctx.bw.dcn.clk.fw_based_mclk_switching &&
|
||||
dc->dml.soc.num_chans <= 4 &&
|
||||
context->bw_ctx.dml.vba.DRAMSpeed <= 1700 &&
|
||||
context->bw_ctx.dml.vba.DRAMSpeed >= 1500) {
|
||||
|
||||
for (i = 0; i < dc->dml.soc.num_states; i++) {
|
||||
if (dc->dml.soc.clock_limits[i].dram_speed_mts > 1700) {
|
||||
context->bw_ctx.dml.vba.DRAMSpeed = dc->dml.soc.clock_limits[i].dram_speed_mts;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
dcn20_calculate_dlg_params(dc, context, pipes, pipe_cnt, vlevel);
|
||||
DC_FP_END();
|
||||
|
||||
if (!pstate_en)
|
||||
/* Restore full p-state latency */
|
||||
|
|
|
@ -148,8 +148,8 @@ struct _vcs_dpi_soc_bounding_box_st dcn3_14_soc = {
|
|||
.num_states = 5,
|
||||
.sr_exit_time_us = 16.5,
|
||||
.sr_enter_plus_exit_time_us = 18.5,
|
||||
.sr_exit_z8_time_us = 442.0,
|
||||
.sr_enter_plus_exit_z8_time_us = 560.0,
|
||||
.sr_exit_z8_time_us = 268.0,
|
||||
.sr_enter_plus_exit_z8_time_us = 393.0,
|
||||
.writeback_latency_us = 12.0,
|
||||
.dram_channel_width_bytes = 4,
|
||||
.round_trip_ping_latency_dcfclk_cycles = 106,
|
||||
|
|
|
@ -1200,9 +1200,7 @@ static void dcn32_full_validate_bw_helper(struct dc *dc,
|
|||
}
|
||||
} else {
|
||||
// Most populate phantom DLG params before programming hardware / timing for phantom pipe
|
||||
DC_FP_START();
|
||||
dcn32_helper_populate_phantom_dlg_params(dc, context, pipes, *pipe_cnt);
|
||||
DC_FP_END();
|
||||
|
||||
/* Call validate_apply_pipe_split flags after calling DML getters for
|
||||
* phantom dlg params, or some of the VBA params indicating pipe split
|
||||
|
@ -1503,11 +1501,8 @@ bool dcn32_internal_validate_bw(struct dc *dc,
|
|||
|
||||
dml_log_pipe_params(&context->bw_ctx.dml, pipes, pipe_cnt);
|
||||
|
||||
if (!fast_validate) {
|
||||
DC_FP_START();
|
||||
if (!fast_validate)
|
||||
dcn32_full_validate_bw_helper(dc, context, pipes, &vlevel, split, merge, &pipe_cnt);
|
||||
DC_FP_END();
|
||||
}
|
||||
|
||||
if (fast_validate ||
|
||||
(dc->debug.dml_disallow_alternate_prefetch_modes &&
|
||||
|
@ -2172,9 +2167,7 @@ static int build_synthetic_soc_states(struct clk_bw_params *bw_params,
|
|||
entry.fabricclk_mhz = 0;
|
||||
entry.dram_speed_mts = 0;
|
||||
|
||||
DC_FP_START();
|
||||
insert_entry_into_table_sorted(table, num_entries, &entry);
|
||||
DC_FP_END();
|
||||
}
|
||||
|
||||
// Insert the max DCFCLK
|
||||
|
@ -2182,9 +2175,7 @@ static int build_synthetic_soc_states(struct clk_bw_params *bw_params,
|
|||
entry.fabricclk_mhz = 0;
|
||||
entry.dram_speed_mts = 0;
|
||||
|
||||
DC_FP_START();
|
||||
insert_entry_into_table_sorted(table, num_entries, &entry);
|
||||
DC_FP_END();
|
||||
|
||||
// Insert the UCLK DPMS
|
||||
for (i = 0; i < num_uclk_dpms; i++) {
|
||||
|
@ -2192,9 +2183,7 @@ static int build_synthetic_soc_states(struct clk_bw_params *bw_params,
|
|||
entry.fabricclk_mhz = 0;
|
||||
entry.dram_speed_mts = bw_params->clk_table.entries[i].memclk_mhz * 16;
|
||||
|
||||
DC_FP_START();
|
||||
insert_entry_into_table_sorted(table, num_entries, &entry);
|
||||
DC_FP_END();
|
||||
}
|
||||
|
||||
// If FCLK is coarse grained, insert individual DPMs.
|
||||
|
@ -2204,9 +2193,7 @@ static int build_synthetic_soc_states(struct clk_bw_params *bw_params,
|
|||
entry.fabricclk_mhz = bw_params->clk_table.entries[i].fclk_mhz;
|
||||
entry.dram_speed_mts = 0;
|
||||
|
||||
DC_FP_START();
|
||||
insert_entry_into_table_sorted(table, num_entries, &entry);
|
||||
DC_FP_END();
|
||||
}
|
||||
}
|
||||
// If FCLK fine grained, only insert max
|
||||
|
@ -2215,9 +2202,7 @@ static int build_synthetic_soc_states(struct clk_bw_params *bw_params,
|
|||
entry.fabricclk_mhz = max_fclk_mhz;
|
||||
entry.dram_speed_mts = 0;
|
||||
|
||||
DC_FP_START();
|
||||
insert_entry_into_table_sorted(table, num_entries, &entry);
|
||||
DC_FP_END();
|
||||
}
|
||||
|
||||
// At this point, the table contains all "points of interest" based on
|
||||
|
|
|
@ -807,7 +807,8 @@ static void DISPCLKDPPCLKDCFCLKDeepSleepPrefetchParametersWatermarksAndPerforman
|
|||
v->SwathHeightY[k],
|
||||
v->SwathHeightC[k],
|
||||
TWait,
|
||||
v->DRAMSpeedPerState[mode_lib->vba.VoltageLevel] <= MEM_STROBE_FREQ_MHZ ?
|
||||
(v->DRAMSpeedPerState[mode_lib->vba.VoltageLevel] <= MEM_STROBE_FREQ_MHZ ||
|
||||
v->DCFCLKPerState[mode_lib->vba.VoltageLevel] <= MIN_DCFCLK_FREQ_MHZ) ?
|
||||
mode_lib->vba.ip.min_prefetch_in_strobe_us : 0,
|
||||
/* Output */
|
||||
&v->DSTXAfterScaler[k],
|
||||
|
@ -3288,7 +3289,7 @@ void dml32_ModeSupportAndSystemConfigurationFull(struct display_mode_lib *mode_l
|
|||
v->swath_width_chroma_ub_this_state[k],
|
||||
v->SwathHeightYThisState[k],
|
||||
v->SwathHeightCThisState[k], v->TWait,
|
||||
v->DRAMSpeedPerState[i] <= MEM_STROBE_FREQ_MHZ ?
|
||||
(v->DRAMSpeedPerState[i] <= MEM_STROBE_FREQ_MHZ || v->DCFCLKState[i][j] <= MIN_DCFCLK_FREQ_MHZ) ?
|
||||
mode_lib->vba.ip.min_prefetch_in_strobe_us : 0,
|
||||
|
||||
/* Output */
|
||||
|
|
|
@ -52,6 +52,7 @@
|
|||
#define BPP_BLENDED_PIPE 0xffffffff
|
||||
|
||||
#define MEM_STROBE_FREQ_MHZ 1600
|
||||
#define MIN_DCFCLK_FREQ_MHZ 200
|
||||
#define MEM_STROBE_MAX_DELIVERY_TIME_US 60.0
|
||||
|
||||
struct display_mode_lib;
|
||||
|
|
|
@ -106,16 +106,16 @@ struct _vcs_dpi_soc_bounding_box_st dcn3_21_soc = {
|
|||
.clock_limits = {
|
||||
{
|
||||
.state = 0,
|
||||
.dcfclk_mhz = 1564.0,
|
||||
.fabricclk_mhz = 400.0,
|
||||
.dispclk_mhz = 2150.0,
|
||||
.dppclk_mhz = 2150.0,
|
||||
.dcfclk_mhz = 1434.0,
|
||||
.fabricclk_mhz = 2250.0,
|
||||
.dispclk_mhz = 1720.0,
|
||||
.dppclk_mhz = 1720.0,
|
||||
.phyclk_mhz = 810.0,
|
||||
.phyclk_d18_mhz = 667.0,
|
||||
.phyclk_d32_mhz = 625.0,
|
||||
.phyclk_d32_mhz = 313.0,
|
||||
.socclk_mhz = 1200.0,
|
||||
.dscclk_mhz = 716.667,
|
||||
.dram_speed_mts = 1600.0,
|
||||
.dscclk_mhz = 573.333,
|
||||
.dram_speed_mts = 16000.0,
|
||||
.dtbclk_mhz = 1564.0,
|
||||
},
|
||||
},
|
||||
|
@ -125,14 +125,14 @@ struct _vcs_dpi_soc_bounding_box_st dcn3_21_soc = {
|
|||
.sr_exit_z8_time_us = 285.0,
|
||||
.sr_enter_plus_exit_z8_time_us = 320,
|
||||
.writeback_latency_us = 12.0,
|
||||
.round_trip_ping_latency_dcfclk_cycles = 263,
|
||||
.round_trip_ping_latency_dcfclk_cycles = 207,
|
||||
.urgent_latency_pixel_data_only_us = 4,
|
||||
.urgent_latency_pixel_mixed_with_vm_data_us = 4,
|
||||
.urgent_latency_vm_data_only_us = 4,
|
||||
.fclk_change_latency_us = 20,
|
||||
.usr_retraining_latency_us = 2,
|
||||
.smn_latency_us = 2,
|
||||
.mall_allocated_for_dcn_mbytes = 64,
|
||||
.fclk_change_latency_us = 7,
|
||||
.usr_retraining_latency_us = 0,
|
||||
.smn_latency_us = 0,
|
||||
.mall_allocated_for_dcn_mbytes = 32,
|
||||
.urgent_out_of_order_return_per_channel_pixel_only_bytes = 4096,
|
||||
.urgent_out_of_order_return_per_channel_pixel_and_vm_bytes = 4096,
|
||||
.urgent_out_of_order_return_per_channel_vm_only_bytes = 4096,
|
||||
|
|
|
@ -148,18 +148,21 @@ struct dccg_funcs {
|
|||
struct dccg *dccg,
|
||||
int inst);
|
||||
|
||||
void (*set_pixel_rate_div)(
|
||||
struct dccg *dccg,
|
||||
uint32_t otg_inst,
|
||||
enum pixel_rate_div k1,
|
||||
enum pixel_rate_div k2);
|
||||
void (*set_pixel_rate_div)(struct dccg *dccg,
|
||||
uint32_t otg_inst,
|
||||
enum pixel_rate_div k1,
|
||||
enum pixel_rate_div k2);
|
||||
|
||||
void (*set_valid_pixel_rate)(
|
||||
struct dccg *dccg,
|
||||
int ref_dtbclk_khz,
|
||||
int otg_inst,
|
||||
int pixclk_khz);
|
||||
void (*set_valid_pixel_rate)(
|
||||
struct dccg *dccg,
|
||||
int ref_dtbclk_khz,
|
||||
int otg_inst,
|
||||
int pixclk_khz);
|
||||
|
||||
void (*dpp_root_clock_control)(
|
||||
struct dccg *dccg,
|
||||
unsigned int dpp_inst,
|
||||
bool clock_on);
|
||||
};
|
||||
|
||||
#endif //__DAL_DCCG_H__
|
||||
|
|
|
@ -115,6 +115,10 @@ struct hwseq_private_funcs {
|
|||
void (*plane_atomic_disable)(struct dc *dc, struct pipe_ctx *pipe_ctx);
|
||||
void (*enable_power_gating_plane)(struct dce_hwseq *hws,
|
||||
bool enable);
|
||||
void (*dpp_root_clock_control)(
|
||||
struct dce_hwseq *hws,
|
||||
unsigned int dpp_inst,
|
||||
bool clock_on);
|
||||
void (*dpp_pg_control)(struct dce_hwseq *hws,
|
||||
unsigned int dpp_inst,
|
||||
bool power_on);
|
||||
|
|
|
@ -130,12 +130,13 @@ void dmub_dcn32_reset(struct dmub_srv *dmub)
|
|||
REG_WRITE(DMCUB_INBOX1_WPTR, 0);
|
||||
REG_WRITE(DMCUB_OUTBOX1_RPTR, 0);
|
||||
REG_WRITE(DMCUB_OUTBOX1_WPTR, 0);
|
||||
REG_WRITE(DMCUB_OUTBOX0_RPTR, 0);
|
||||
REG_WRITE(DMCUB_OUTBOX0_WPTR, 0);
|
||||
REG_WRITE(DMCUB_SCRATCH0, 0);
|
||||
}
|
||||
|
||||
void dmub_dcn32_reset_release(struct dmub_srv *dmub)
|
||||
{
|
||||
REG_WRITE(DMCUB_GPINT_DATAIN1, 0);
|
||||
REG_UPDATE(MMHUBBUB_SOFT_RESET, DMUIF_SOFT_RESET, 0);
|
||||
REG_WRITE(DMCUB_SCRATCH15, dmub->psp_version & 0x001100FF);
|
||||
REG_UPDATE_2(DMCUB_CNTL, DMCUB_ENABLE, 1, DMCUB_TRACEPORT_EN, 1);
|
||||
|
|
|
@ -36,6 +36,8 @@
|
|||
#define amdgpu_dpm_enable_bapm(adev, e) \
|
||||
((adev)->powerplay.pp_funcs->enable_bapm((adev)->powerplay.pp_handle, (e)))
|
||||
|
||||
#define amdgpu_dpm_is_legacy_dpm(adev) ((adev)->powerplay.pp_handle == (adev))
|
||||
|
||||
int amdgpu_dpm_get_sclk(struct amdgpu_device *adev, bool low)
|
||||
{
|
||||
const struct amd_pm_funcs *pp_funcs = adev->powerplay.pp_funcs;
|
||||
|
@ -1414,15 +1416,24 @@ int amdgpu_dpm_get_smu_prv_buf_details(struct amdgpu_device *adev,
|
|||
|
||||
int amdgpu_dpm_is_overdrive_supported(struct amdgpu_device *adev)
|
||||
{
|
||||
struct pp_hwmgr *hwmgr = adev->powerplay.pp_handle;
|
||||
struct smu_context *smu = adev->powerplay.pp_handle;
|
||||
if (is_support_sw_smu(adev)) {
|
||||
struct smu_context *smu = adev->powerplay.pp_handle;
|
||||
|
||||
if ((is_support_sw_smu(adev) && smu->od_enabled) ||
|
||||
(is_support_sw_smu(adev) && smu->is_apu) ||
|
||||
(!is_support_sw_smu(adev) && hwmgr->od_enabled))
|
||||
return true;
|
||||
return (smu->od_enabled || smu->is_apu);
|
||||
} else {
|
||||
struct pp_hwmgr *hwmgr;
|
||||
|
||||
return false;
|
||||
/*
|
||||
* dpm on some legacy asics don't carry od_enabled member
|
||||
* as its pp_handle is casted directly from adev.
|
||||
*/
|
||||
if (amdgpu_dpm_is_legacy_dpm(adev))
|
||||
return false;
|
||||
|
||||
hwmgr = (struct pp_hwmgr *)adev->powerplay.pp_handle;
|
||||
|
||||
return hwmgr->od_enabled;
|
||||
}
|
||||
}
|
||||
|
||||
int amdgpu_dpm_set_pp_table(struct amdgpu_device *adev,
|
||||
|
|
|
@ -1210,7 +1210,7 @@ static void gen11_dsi_powerup_panel(struct intel_encoder *encoder)
|
|||
|
||||
/* panel power on related mipi dsi vbt sequences */
|
||||
intel_dsi_vbt_exec_sequence(intel_dsi, MIPI_SEQ_POWER_ON);
|
||||
intel_dsi_msleep(intel_dsi, intel_dsi->panel_on_delay);
|
||||
drm_msleep(intel_dsi->panel_on_delay);
|
||||
intel_dsi_vbt_exec_sequence(intel_dsi, MIPI_SEQ_DEASSERT_RESET);
|
||||
intel_dsi_vbt_exec_sequence(intel_dsi, MIPI_SEQ_INIT_OTP);
|
||||
intel_dsi_vbt_exec_sequence(intel_dsi, MIPI_SEQ_DISPLAY_ON);
|
||||
|
|
|
@ -776,17 +776,6 @@ void intel_dsi_vbt_exec_sequence(struct intel_dsi *intel_dsi,
|
|||
#endif
|
||||
}
|
||||
|
||||
void intel_dsi_msleep(struct intel_dsi *intel_dsi, int msec)
|
||||
{
|
||||
struct intel_connector *connector = intel_dsi->attached_connector;
|
||||
|
||||
/* For v3 VBTs in vid-mode the delays are part of the VBT sequences */
|
||||
if (is_vid_mode(intel_dsi) && connector->panel.vbt.dsi.seq_version >= 3)
|
||||
return;
|
||||
|
||||
drm_msleep(msec);
|
||||
}
|
||||
|
||||
void intel_dsi_log_params(struct intel_dsi *intel_dsi)
|
||||
{
|
||||
struct drm_i915_private *i915 = to_i915(intel_dsi->base.base.dev);
|
||||
|
|
|
@ -16,7 +16,6 @@ void intel_dsi_vbt_gpio_init(struct intel_dsi *intel_dsi, bool panel_is_on);
|
|||
void intel_dsi_vbt_gpio_cleanup(struct intel_dsi *intel_dsi);
|
||||
void intel_dsi_vbt_exec_sequence(struct intel_dsi *intel_dsi,
|
||||
enum mipi_seq seq_id);
|
||||
void intel_dsi_msleep(struct intel_dsi *intel_dsi, int msec);
|
||||
void intel_dsi_log_params(struct intel_dsi *intel_dsi);
|
||||
|
||||
#endif /* __INTEL_DSI_VBT_H__ */
|
||||
|
|
|
@ -85,6 +85,10 @@ static u16 skl_scaler_calc_phase(int sub, int scale, bool chroma_cosited)
|
|||
#define ICL_MAX_SRC_H 4096
|
||||
#define ICL_MAX_DST_W 5120
|
||||
#define ICL_MAX_DST_H 4096
|
||||
#define MTL_MAX_SRC_W 4096
|
||||
#define MTL_MAX_SRC_H 8192
|
||||
#define MTL_MAX_DST_W 8192
|
||||
#define MTL_MAX_DST_H 8192
|
||||
#define SKL_MIN_YUV_420_SRC_W 16
|
||||
#define SKL_MIN_YUV_420_SRC_H 16
|
||||
|
||||
|
@ -101,6 +105,10 @@ skl_update_scaler(struct intel_crtc_state *crtc_state, bool force_detach,
|
|||
struct drm_i915_private *dev_priv = to_i915(crtc->base.dev);
|
||||
const struct drm_display_mode *adjusted_mode =
|
||||
&crtc_state->hw.adjusted_mode;
|
||||
int pipe_src_w = drm_rect_width(&crtc_state->pipe_src);
|
||||
int pipe_src_h = drm_rect_height(&crtc_state->pipe_src);
|
||||
int min_src_w, min_src_h, min_dst_w, min_dst_h;
|
||||
int max_src_w, max_src_h, max_dst_w, max_dst_h;
|
||||
|
||||
/*
|
||||
* Src coordinates are already rotated by 270 degrees for
|
||||
|
@ -155,15 +163,33 @@ skl_update_scaler(struct intel_crtc_state *crtc_state, bool force_detach,
|
|||
return -EINVAL;
|
||||
}
|
||||
|
||||
min_src_w = SKL_MIN_SRC_W;
|
||||
min_src_h = SKL_MIN_SRC_H;
|
||||
min_dst_w = SKL_MIN_DST_W;
|
||||
min_dst_h = SKL_MIN_DST_H;
|
||||
|
||||
if (DISPLAY_VER(dev_priv) < 11) {
|
||||
max_src_w = SKL_MAX_SRC_W;
|
||||
max_src_h = SKL_MAX_SRC_H;
|
||||
max_dst_w = SKL_MAX_DST_W;
|
||||
max_dst_h = SKL_MAX_DST_H;
|
||||
} else if (DISPLAY_VER(dev_priv) < 14) {
|
||||
max_src_w = ICL_MAX_SRC_W;
|
||||
max_src_h = ICL_MAX_SRC_H;
|
||||
max_dst_w = ICL_MAX_DST_W;
|
||||
max_dst_h = ICL_MAX_DST_H;
|
||||
} else {
|
||||
max_src_w = MTL_MAX_SRC_W;
|
||||
max_src_h = MTL_MAX_SRC_H;
|
||||
max_dst_w = MTL_MAX_DST_W;
|
||||
max_dst_h = MTL_MAX_DST_H;
|
||||
}
|
||||
|
||||
/* range checks */
|
||||
if (src_w < SKL_MIN_SRC_W || src_h < SKL_MIN_SRC_H ||
|
||||
dst_w < SKL_MIN_DST_W || dst_h < SKL_MIN_DST_H ||
|
||||
(DISPLAY_VER(dev_priv) >= 11 &&
|
||||
(src_w > ICL_MAX_SRC_W || src_h > ICL_MAX_SRC_H ||
|
||||
dst_w > ICL_MAX_DST_W || dst_h > ICL_MAX_DST_H)) ||
|
||||
(DISPLAY_VER(dev_priv) < 11 &&
|
||||
(src_w > SKL_MAX_SRC_W || src_h > SKL_MAX_SRC_H ||
|
||||
dst_w > SKL_MAX_DST_W || dst_h > SKL_MAX_DST_H))) {
|
||||
if (src_w < min_src_w || src_h < min_src_h ||
|
||||
dst_w < min_dst_w || dst_h < min_dst_h ||
|
||||
src_w > max_src_w || src_h > max_src_h ||
|
||||
dst_w > max_dst_w || dst_h > max_dst_h) {
|
||||
drm_dbg_kms(&dev_priv->drm,
|
||||
"scaler_user index %u.%u: src %ux%u dst %ux%u "
|
||||
"size is out of scaler range\n",
|
||||
|
@ -172,6 +198,21 @@ skl_update_scaler(struct intel_crtc_state *crtc_state, bool force_detach,
|
|||
return -EINVAL;
|
||||
}
|
||||
|
||||
/*
|
||||
* The pipe scaler does not use all the bits of PIPESRC, at least
|
||||
* on the earlier platforms. So even when we're scaling a plane
|
||||
* the *pipe* source size must not be too large. For simplicity
|
||||
* we assume the limits match the scaler source size limits. Might
|
||||
* not be 100% accurate on all platforms, but good enough for now.
|
||||
*/
|
||||
if (pipe_src_w > max_src_w || pipe_src_h > max_src_h) {
|
||||
drm_dbg_kms(&dev_priv->drm,
|
||||
"scaler_user index %u.%u: pipe src size %ux%u "
|
||||
"is out of scaler range\n",
|
||||
crtc->pipe, scaler_user, pipe_src_w, pipe_src_h);
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
/* mark this plane as a scaler user in crtc_state */
|
||||
scaler_state->scaler_users |= (1 << scaler_user);
|
||||
drm_dbg_kms(&dev_priv->drm, "scaler_user index %u.%u: "
|
||||
|
|
|
@ -782,7 +782,6 @@ static void intel_dsi_pre_enable(struct intel_atomic_state *state,
|
|||
{
|
||||
struct intel_dsi *intel_dsi = enc_to_intel_dsi(encoder);
|
||||
struct intel_crtc *crtc = to_intel_crtc(pipe_config->uapi.crtc);
|
||||
struct intel_connector *connector = to_intel_connector(conn_state->connector);
|
||||
struct drm_i915_private *dev_priv = to_i915(crtc->base.dev);
|
||||
enum pipe pipe = crtc->pipe;
|
||||
enum port port;
|
||||
|
@ -830,21 +829,10 @@ static void intel_dsi_pre_enable(struct intel_atomic_state *state,
|
|||
if (!IS_GEMINILAKE(dev_priv))
|
||||
intel_dsi_prepare(encoder, pipe_config);
|
||||
|
||||
/* Give the panel time to power-on and then deassert its reset */
|
||||
intel_dsi_vbt_exec_sequence(intel_dsi, MIPI_SEQ_POWER_ON);
|
||||
|
||||
/*
|
||||
* Give the panel time to power-on and then deassert its reset.
|
||||
* Depending on the VBT MIPI sequences version the deassert-seq
|
||||
* may contain the necessary delay, intel_dsi_msleep() will skip
|
||||
* the delay in that case. If there is no deassert-seq, then an
|
||||
* unconditional msleep is used to give the panel time to power-on.
|
||||
*/
|
||||
if (connector->panel.vbt.dsi.sequence[MIPI_SEQ_DEASSERT_RESET]) {
|
||||
intel_dsi_msleep(intel_dsi, intel_dsi->panel_on_delay);
|
||||
intel_dsi_vbt_exec_sequence(intel_dsi, MIPI_SEQ_DEASSERT_RESET);
|
||||
} else {
|
||||
drm_msleep(intel_dsi->panel_on_delay);
|
||||
}
|
||||
drm_msleep(intel_dsi->panel_on_delay);
|
||||
intel_dsi_vbt_exec_sequence(intel_dsi, MIPI_SEQ_DEASSERT_RESET);
|
||||
|
||||
if (IS_GEMINILAKE(dev_priv)) {
|
||||
glk_cold_boot = glk_dsi_enable_io(encoder);
|
||||
|
@ -878,7 +866,7 @@ static void intel_dsi_pre_enable(struct intel_atomic_state *state,
|
|||
drm_msleep(20); /* XXX */
|
||||
for_each_dsi_port(port, intel_dsi->ports)
|
||||
dpi_send_cmd(intel_dsi, TURN_ON, false, port);
|
||||
intel_dsi_msleep(intel_dsi, 100);
|
||||
drm_msleep(100);
|
||||
|
||||
intel_dsi_vbt_exec_sequence(intel_dsi, MIPI_SEQ_DISPLAY_ON);
|
||||
|
||||
|
@ -1006,7 +994,7 @@ static void intel_dsi_post_disable(struct intel_atomic_state *state,
|
|||
/* Assert reset */
|
||||
intel_dsi_vbt_exec_sequence(intel_dsi, MIPI_SEQ_ASSERT_RESET);
|
||||
|
||||
intel_dsi_msleep(intel_dsi, intel_dsi->panel_off_delay);
|
||||
drm_msleep(intel_dsi->panel_off_delay);
|
||||
intel_dsi_vbt_exec_sequence(intel_dsi, MIPI_SEQ_POWER_OFF);
|
||||
|
||||
intel_dsi->panel_power_off_time = ktime_get_boottime();
|
||||
|
|
|
@ -1133,6 +1133,8 @@ static const struct intel_gt_definition xelpmp_extra_gt[] = {
|
|||
static const struct intel_device_info mtl_info = {
|
||||
XE_HP_FEATURES,
|
||||
XE_LPDP_FEATURES,
|
||||
.__runtime.cpu_transcoder_mask = BIT(TRANSCODER_A) | BIT(TRANSCODER_B) |
|
||||
BIT(TRANSCODER_C) | BIT(TRANSCODER_D),
|
||||
/*
|
||||
* Real graphics IP version will be obtained from hardware GMD_ID
|
||||
* register. Value provided here is just for sanity checking.
|
||||
|
|
|
@ -7840,8 +7840,8 @@ enum skl_power_gate {
|
|||
|
||||
#define _PLANE_CSC_RY_GY_1(pipe) _PIPE(pipe, _PLANE_CSC_RY_GY_1_A, \
|
||||
_PLANE_CSC_RY_GY_1_B)
|
||||
#define _PLANE_CSC_RY_GY_2(pipe) _PIPE(pipe, _PLANE_INPUT_CSC_RY_GY_2_A, \
|
||||
_PLANE_INPUT_CSC_RY_GY_2_B)
|
||||
#define _PLANE_CSC_RY_GY_2(pipe) _PIPE(pipe, _PLANE_CSC_RY_GY_2_A, \
|
||||
_PLANE_CSC_RY_GY_2_B)
|
||||
#define PLANE_CSC_COEFF(pipe, plane, index) _MMIO_PLANE(plane, \
|
||||
_PLANE_CSC_RY_GY_1(pipe) + (index) * 4, \
|
||||
_PLANE_CSC_RY_GY_2(pipe) + (index) * 4)
|
||||
|
|
|
@ -240,6 +240,8 @@
|
|||
#define DP_DSC_SUPPORT 0x060 /* DP 1.4 */
|
||||
# define DP_DSC_DECOMPRESSION_IS_SUPPORTED (1 << 0)
|
||||
# define DP_DSC_PASSTHROUGH_IS_SUPPORTED (1 << 1)
|
||||
# define DP_DSC_DYNAMIC_PPS_UPDATE_SUPPORT_COMP_TO_COMP (1 << 2)
|
||||
# define DP_DSC_DYNAMIC_PPS_UPDATE_SUPPORT_UNCOMP_TO_COMP (1 << 3)
|
||||
|
||||
#define DP_DSC_REV 0x061
|
||||
# define DP_DSC_MAJOR_MASK (0xf << 0)
|
||||
|
@ -278,12 +280,14 @@
|
|||
|
||||
#define DP_DSC_BLK_PREDICTION_SUPPORT 0x066
|
||||
# define DP_DSC_BLK_PREDICTION_IS_SUPPORTED (1 << 0)
|
||||
# define DP_DSC_RGB_COLOR_CONV_BYPASS_SUPPORT (1 << 1)
|
||||
|
||||
#define DP_DSC_MAX_BITS_PER_PIXEL_LOW 0x067 /* eDP 1.4 */
|
||||
|
||||
#define DP_DSC_MAX_BITS_PER_PIXEL_HI 0x068 /* eDP 1.4 */
|
||||
# define DP_DSC_MAX_BITS_PER_PIXEL_HI_MASK (0x3 << 0)
|
||||
# define DP_DSC_MAX_BITS_PER_PIXEL_HI_SHIFT 8
|
||||
# define DP_DSC_MAX_BPP_DELTA_VERSION_MASK (0x3 << 5) /* eDP 1.5 & DP 2.0 */
|
||||
# define DP_DSC_MAX_BPP_DELTA_AVAILABILITY (1 << 7) /* eDP 1.5 & DP 2.0 */
|
||||
|
||||
#define DP_DSC_DEC_COLOR_FORMAT_CAP 0x069
|
||||
# define DP_DSC_RGB (1 << 0)
|
||||
|
@ -345,11 +349,13 @@
|
|||
# define DP_DSC_24_PER_DP_DSC_SINK (1 << 2)
|
||||
|
||||
#define DP_DSC_BITS_PER_PIXEL_INC 0x06F
|
||||
# define DP_DSC_RGB_YCbCr444_MAX_BPP_DELTA_MASK 0x1f
|
||||
# define DP_DSC_RGB_YCbCr420_MAX_BPP_DELTA_MASK 0xe0
|
||||
# define DP_DSC_BITS_PER_PIXEL_1_16 0x0
|
||||
# define DP_DSC_BITS_PER_PIXEL_1_8 0x1
|
||||
# define DP_DSC_BITS_PER_PIXEL_1_4 0x2
|
||||
# define DP_DSC_BITS_PER_PIXEL_1_2 0x3
|
||||
# define DP_DSC_BITS_PER_PIXEL_1 0x4
|
||||
# define DP_DSC_BITS_PER_PIXEL_1_1 0x4
|
||||
|
||||
#define DP_PSR_SUPPORT 0x070 /* XXX 1.2? */
|
||||
# define DP_PSR_IS_SUPPORTED 1
|
||||
|
|
|
@ -181,9 +181,8 @@ static inline u16
|
|||
drm_edp_dsc_sink_output_bpp(const u8 dsc_dpcd[DP_DSC_RECEIVER_CAP_SIZE])
|
||||
{
|
||||
return dsc_dpcd[DP_DSC_MAX_BITS_PER_PIXEL_LOW - DP_DSC_SUPPORT] |
|
||||
(dsc_dpcd[DP_DSC_MAX_BITS_PER_PIXEL_HI - DP_DSC_SUPPORT] &
|
||||
DP_DSC_MAX_BITS_PER_PIXEL_HI_MASK <<
|
||||
DP_DSC_MAX_BITS_PER_PIXEL_HI_SHIFT);
|
||||
((dsc_dpcd[DP_DSC_MAX_BITS_PER_PIXEL_HI - DP_DSC_SUPPORT] &
|
||||
DP_DSC_MAX_BITS_PER_PIXEL_HI_MASK) << 8);
|
||||
}
|
||||
|
||||
static inline u32
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
$OpenBSD: pcidevs,v 1.2038 2023/06/12 01:12:33 jsg Exp $
|
||||
$OpenBSD: pcidevs,v 1.2039 2023/06/13 02:43:39 jcs Exp $
|
||||
/* $NetBSD: pcidevs,v 1.30 1997/06/24 06:20:24 thorpej Exp $ */
|
||||
|
||||
/*
|
||||
|
@ -8632,6 +8632,7 @@ product SANDISK PCSN520_2 0x5004 PC SN520
|
|||
product SANDISK WDSXXXG3X0C 0x5006 WD Black NVMe
|
||||
product SANDISK PCSN530 0x5008 PC SN530
|
||||
product SANDISK SN850 0x5011 SN850
|
||||
product SANDISK PCSN740 0x5015 PC SN740
|
||||
|
||||
/* Sangoma products */
|
||||
product SANGOMA A10X 0x0300 A10x
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
* THIS FILE AUTOMATICALLY GENERATED. DO NOT EDIT.
|
||||
*
|
||||
* generated from:
|
||||
* OpenBSD: pcidevs,v 1.2038 2023/06/12 01:12:33 jsg Exp
|
||||
* OpenBSD: pcidevs,v 1.2039 2023/06/13 02:43:39 jcs Exp
|
||||
*/
|
||||
/* $NetBSD: pcidevs,v 1.30 1997/06/24 06:20:24 thorpej Exp $ */
|
||||
|
||||
|
@ -8637,6 +8637,7 @@
|
|||
#define PCI_PRODUCT_SANDISK_WDSXXXG3X0C 0x5006 /* WD Black NVMe */
|
||||
#define PCI_PRODUCT_SANDISK_PCSN530 0x5008 /* PC SN530 */
|
||||
#define PCI_PRODUCT_SANDISK_SN850 0x5011 /* SN850 */
|
||||
#define PCI_PRODUCT_SANDISK_PCSN740 0x5015 /* PC SN740 */
|
||||
|
||||
/* Sangoma products */
|
||||
#define PCI_PRODUCT_SANGOMA_A10X 0x0300 /* A10x */
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
* THIS FILE AUTOMATICALLY GENERATED. DO NOT EDIT.
|
||||
*
|
||||
* generated from:
|
||||
* OpenBSD: pcidevs,v 1.2038 2023/06/12 01:12:33 jsg Exp
|
||||
* OpenBSD: pcidevs,v 1.2039 2023/06/13 02:43:39 jcs Exp
|
||||
*/
|
||||
|
||||
/* $NetBSD: pcidevs,v 1.30 1997/06/24 06:20:24 thorpej Exp $ */
|
||||
|
@ -31047,6 +31047,10 @@ static const struct pci_known_product pci_known_products[] = {
|
|||
PCI_VENDOR_SANDISK, PCI_PRODUCT_SANDISK_SN850,
|
||||
"SN850",
|
||||
},
|
||||
{
|
||||
PCI_VENDOR_SANDISK, PCI_PRODUCT_SANDISK_PCSN740,
|
||||
"PC SN740",
|
||||
},
|
||||
{
|
||||
PCI_VENDOR_SANGOMA, PCI_PRODUCT_SANGOMA_A10X,
|
||||
"A10x",
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
/* $OpenBSD: entry.c,v 1.57 2023/06/04 17:27:27 millert Exp $ */
|
||||
/* $OpenBSD: entry.c,v 1.58 2023/06/13 15:36:21 millert Exp $ */
|
||||
|
||||
/*
|
||||
* Copyright 1988,1990,1993,1994 by Paul Vixie
|
||||
|
@ -69,7 +69,8 @@ static const char *DowNames[] = {
|
|||
static int get_list(bitstr_t *, int, int, const char *[], int, FILE *),
|
||||
get_range(bitstr_t *, int, int, const char *[], int, FILE *),
|
||||
get_number(int *, int, const char *[], int, FILE *, const char *),
|
||||
set_element(bitstr_t *, int, int, int);
|
||||
set_element(bitstr_t *, int, int, int),
|
||||
set_range(bitstr_t *, int, int, int, int, int);
|
||||
|
||||
void
|
||||
free_entry(entry *e)
|
||||
|
@ -142,38 +143,56 @@ load_entry(FILE *file, void (*error_func)(const char *), struct passwd *pw,
|
|||
if (!strcmp("reboot", cmd)) {
|
||||
e->flags |= WHEN_REBOOT;
|
||||
} else if (!strcmp("yearly", cmd) || !strcmp("annually", cmd)){
|
||||
bit_set(e->minute, 0);
|
||||
bit_set(e->hour, 0);
|
||||
bit_set(e->dom, 0);
|
||||
bit_set(e->month, 0);
|
||||
bit_nset(e->dow, 0, (LAST_DOW-FIRST_DOW+1));
|
||||
set_element(e->minute, FIRST_MINUTE, LAST_MINUTE,
|
||||
FIRST_MINUTE);
|
||||
set_element(e->hour, FIRST_HOUR, LAST_HOUR, FIRST_HOUR);
|
||||
set_element(e->dom, FIRST_DOM, LAST_DOM, FIRST_DOM);
|
||||
set_element(e->month, FIRST_MONTH, LAST_MONTH,
|
||||
FIRST_MONTH);
|
||||
set_range(e->dow, FIRST_DOW, LAST_DOW, FIRST_DOW,
|
||||
LAST_DOW, 1);
|
||||
e->flags |= DOW_STAR;
|
||||
} else if (!strcmp("monthly", cmd)) {
|
||||
bit_set(e->minute, 0);
|
||||
bit_set(e->hour, 0);
|
||||
bit_set(e->dom, 0);
|
||||
bit_nset(e->month, 0, (LAST_MONTH-FIRST_MONTH+1));
|
||||
bit_nset(e->dow, 0, (LAST_DOW-FIRST_DOW+1));
|
||||
set_element(e->minute, FIRST_MINUTE, LAST_MINUTE,
|
||||
FIRST_MINUTE);
|
||||
set_element(e->hour, FIRST_HOUR, LAST_HOUR, FIRST_HOUR);
|
||||
set_element(e->dom, FIRST_DOM, LAST_DOM, FIRST_DOM);
|
||||
set_range(e->month, FIRST_MONTH, LAST_MONTH,
|
||||
FIRST_MONTH, LAST_MONTH, 1);
|
||||
set_range(e->dow, FIRST_DOW, LAST_DOW, FIRST_DOW,
|
||||
LAST_DOW, 1);
|
||||
e->flags |= DOW_STAR;
|
||||
} else if (!strcmp("weekly", cmd)) {
|
||||
bit_set(e->minute, 0);
|
||||
bit_set(e->hour, 0);
|
||||
bit_nset(e->dom, 0, (LAST_DOM-FIRST_DOM+1));
|
||||
bit_nset(e->month, 0, (LAST_MONTH-FIRST_MONTH+1));
|
||||
bit_set(e->dow, 0);
|
||||
set_element(e->minute, FIRST_MINUTE, LAST_MINUTE,
|
||||
FIRST_MINUTE);
|
||||
set_element(e->hour, FIRST_HOUR, LAST_HOUR, FIRST_HOUR);
|
||||
set_range(e->dom, FIRST_DOM, LAST_DOM, FIRST_DOM,
|
||||
LAST_DOM, 1);
|
||||
set_range(e->month, FIRST_MONTH, LAST_MONTH,
|
||||
FIRST_MONTH, LAST_MONTH, 1);
|
||||
set_element(e->dow, FIRST_DOW, LAST_DOW, FIRST_DOW);
|
||||
e->flags |= DOW_STAR;
|
||||
} else if (!strcmp("daily", cmd) || !strcmp("midnight", cmd)) {
|
||||
bit_set(e->minute, 0);
|
||||
bit_set(e->hour, 0);
|
||||
bit_nset(e->dom, 0, (LAST_DOM-FIRST_DOM+1));
|
||||
bit_nset(e->month, 0, (LAST_MONTH-FIRST_MONTH+1));
|
||||
bit_nset(e->dow, 0, (LAST_DOW-FIRST_DOW+1));
|
||||
set_element(e->minute, FIRST_MINUTE, LAST_MINUTE,
|
||||
FIRST_MINUTE);
|
||||
set_element(e->hour, FIRST_HOUR, LAST_HOUR, FIRST_HOUR);
|
||||
set_range(e->dom, FIRST_DOM, LAST_DOM, FIRST_DOM,
|
||||
LAST_DOM, 1);
|
||||
set_range(e->month, FIRST_MONTH, LAST_MONTH,
|
||||
FIRST_MONTH, LAST_MONTH, 1);
|
||||
set_range(e->dow, FIRST_DOW, LAST_DOW, FIRST_DOW,
|
||||
LAST_DOW, 1);
|
||||
} else if (!strcmp("hourly", cmd)) {
|
||||
bit_set(e->minute, 0);
|
||||
bit_nset(e->hour, 0, (LAST_HOUR-FIRST_HOUR+1));
|
||||
bit_nset(e->dom, 0, (LAST_DOM-FIRST_DOM+1));
|
||||
bit_nset(e->month, 0, (LAST_MONTH-FIRST_MONTH+1));
|
||||
bit_nset(e->dow, 0, (LAST_DOW-FIRST_DOW+1));
|
||||
set_element(e->minute, FIRST_MINUTE, LAST_MINUTE,
|
||||
FIRST_MINUTE);
|
||||
set_range(e->hour, FIRST_HOUR, LAST_HOUR, FIRST_HOUR,
|
||||
LAST_HOUR, 1);
|
||||
set_range(e->dom, FIRST_DOM, LAST_DOM, FIRST_DOM,
|
||||
LAST_DOM, 1);
|
||||
set_range(e->month, FIRST_MONTH, LAST_MONTH,
|
||||
FIRST_MONTH, LAST_MONTH, 1);
|
||||
set_range(e->dow, FIRST_DOW, LAST_DOW,
|
||||
FIRST_DOW, LAST_DOW, 1);
|
||||
e->flags |= HR_STAR;
|
||||
} else {
|
||||
ecode = e_timespec;
|
||||
|
@ -426,7 +445,7 @@ get_list(bitstr_t *bits, int low, int high, const char *names[],
|
|||
|
||||
/* clear the bit string, since the default is 'off'.
|
||||
*/
|
||||
bit_nclear(bits, 0, (high-low+1));
|
||||
bit_nclear(bits, 0, high - low);
|
||||
|
||||
/* process all ranges
|
||||
*/
|
||||
|
@ -458,7 +477,7 @@ get_range(bitstr_t *bits, int low, int high, const char *names[],
|
|||
* number "-" number ["/" number]
|
||||
*/
|
||||
|
||||
int i, num1, num2, num3, rndstep;
|
||||
int num1, num2, num3, rndstep;
|
||||
|
||||
num1 = low;
|
||||
num2 = high;
|
||||
|
@ -578,11 +597,10 @@ get_range(bitstr_t *bits, int low, int high, const char *names[],
|
|||
* proposed conceptually by bob@acornrc, syntactically
|
||||
* designed then implemented by paul vixie).
|
||||
*/
|
||||
for (i = num1; i <= num2; i += num3)
|
||||
if (set_element(bits, low, high, i) == EOF) {
|
||||
unget_char(ch, file);
|
||||
return (EOF);
|
||||
}
|
||||
if (set_range(bits, low, high, num1, num2, num3) == EOF) {
|
||||
unget_char(ch, file);
|
||||
return (EOF);
|
||||
}
|
||||
|
||||
return (ch);
|
||||
}
|
||||
|
@ -643,7 +661,27 @@ set_element(bitstr_t *bits, int low, int high, int number)
|
|||
|
||||
if (number < low || number > high)
|
||||
return (EOF);
|
||||
number -= low;
|
||||
|
||||
bit_set(bits, (number-low));
|
||||
bit_set(bits, number);
|
||||
return (0);
|
||||
}
|
||||
|
||||
static int
|
||||
set_range(bitstr_t *bits, int low, int high, int start, int stop, int step)
|
||||
{
|
||||
int i;
|
||||
|
||||
if (start < low || stop > high)
|
||||
return (EOF);
|
||||
start -= low;
|
||||
stop -= low;
|
||||
|
||||
if (step == 1) {
|
||||
bit_nset(bits, start, stop);
|
||||
} else {
|
||||
for (i = start; i <= stop; i += step)
|
||||
bit_set(bits, i);
|
||||
}
|
||||
return (0);
|
||||
}
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
# ex:ts=8 sw=4:
|
||||
# $OpenBSD: Add.pm,v 1.194 2023/05/27 09:58:26 espie Exp $
|
||||
# $OpenBSD: Add.pm,v 1.195 2023/06/13 09:07:16 espie Exp $
|
||||
#
|
||||
# Copyright (c) 2003-2014 Marc Espie <espie@openbsd.org>
|
||||
#
|
||||
|
@ -15,8 +15,7 @@
|
|||
# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
|
||||
# OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
||||
|
||||
use strict;
|
||||
use warnings;
|
||||
use v5.36;
|
||||
|
||||
package OpenBSD::Add;
|
||||
use OpenBSD::Error;
|
||||
|
@ -25,9 +24,8 @@ use OpenBSD::ArcCheck;
|
|||
use OpenBSD::Paths;
|
||||
use File::Copy;
|
||||
|
||||
sub manpages_index
|
||||
sub manpages_index($state)
|
||||
{
|
||||
my ($state) = @_;
|
||||
return unless defined $state->{addman};
|
||||
my $destdir = $state->{destdir};
|
||||
|
||||
|
@ -44,9 +42,8 @@ sub manpages_index
|
|||
delete $state->{addman};
|
||||
}
|
||||
|
||||
sub register_installation
|
||||
sub register_installation($plist, $state)
|
||||
{
|
||||
my ($plist, $state) = @_;
|
||||
if ($state->{not}) {
|
||||
$plist->to_cache;
|
||||
} else {
|
||||
|
@ -58,17 +55,13 @@ sub register_installation
|
|||
}
|
||||
}
|
||||
|
||||
sub validate_plist
|
||||
sub validate_plist($plist, $state, $set)
|
||||
{
|
||||
my ($plist, $state, $set) = @_;
|
||||
|
||||
$plist->prepare_for_addition($state, $plist->pkgname, $set);
|
||||
}
|
||||
|
||||
sub record_partial_installation
|
||||
sub record_partial_installation($plist, $state, $h)
|
||||
{
|
||||
my ($plist, $state, $h) = @_;
|
||||
|
||||
use OpenBSD::PackingElement;
|
||||
|
||||
my $n = $plist->make_shallow_copy($h);
|
||||
|
@ -96,10 +89,8 @@ sub record_partial_installation
|
|||
return $borked;
|
||||
}
|
||||
|
||||
sub perform_installation
|
||||
sub perform_installation($handle, $state)
|
||||
{
|
||||
my ($handle, $state) = @_;
|
||||
|
||||
return if $state->defines('stub');
|
||||
|
||||
$state->{partial} = $handle->{partial};
|
||||
|
@ -111,9 +102,8 @@ sub perform_installation
|
|||
}
|
||||
}
|
||||
|
||||
sub skip_to_the_end
|
||||
sub skip_to_the_end($handle, $state, $tied, $p)
|
||||
{
|
||||
my ($handle, $state, $tied, $p) = @_;
|
||||
$state->tweak_header("skipping");
|
||||
for my $e (values %$tied) {
|
||||
$e->tie($state);
|
||||
|
@ -130,10 +120,8 @@ sub skip_to_the_end
|
|||
}
|
||||
}
|
||||
|
||||
sub perform_extraction
|
||||
sub perform_extraction($handle, $state)
|
||||
{
|
||||
my ($handle, $state) = @_;
|
||||
|
||||
return if $state->defines('stub');
|
||||
|
||||
$handle->{partial} = {};
|
||||
|
@ -195,18 +183,15 @@ sub perform_extraction
|
|||
|
||||
my $user_tagged = {};
|
||||
|
||||
sub extract_pkgname
|
||||
sub extract_pkgname($pkgname)
|
||||
{
|
||||
my $pkgname = shift;
|
||||
$pkgname =~ s/^.*\///;
|
||||
$pkgname =~ s/\.tgz$//;
|
||||
return $pkgname;
|
||||
}
|
||||
|
||||
sub tweak_package_status
|
||||
sub tweak_package_status($pkgname, $state)
|
||||
{
|
||||
my ($pkgname, $state) = @_;
|
||||
|
||||
$pkgname = extract_pkgname($pkgname);
|
||||
return 0 unless is_installed($pkgname);
|
||||
return 0 unless $user_tagged->{$pkgname};
|
||||
|
@ -224,10 +209,8 @@ sub tweak_package_status
|
|||
return 0;
|
||||
}
|
||||
|
||||
sub tweak_plist_status
|
||||
sub tweak_plist_status($plist, $state)
|
||||
{
|
||||
my ($plist, $state) = @_;
|
||||
|
||||
my $pkgname = $plist->pkgname;
|
||||
if ($state->defines('FW_UPDATE')) {
|
||||
$plist->has('firmware') or
|
||||
|
@ -239,9 +222,9 @@ sub tweak_plist_status
|
|||
}
|
||||
}
|
||||
|
||||
sub tag_user_packages
|
||||
sub tag_user_packages(@p)
|
||||
{
|
||||
for my $set (@_) {
|
||||
for my $set (@p) {
|
||||
for my $n ($set->newer_names) {
|
||||
$user_tagged->{OpenBSD::PackageName::url2pkgname($n)} = 1;
|
||||
}
|
||||
|
@ -278,28 +261,26 @@ use OpenBSD::Error;
|
|||
my ($uidcache, $gidcache);
|
||||
|
||||
# $self->prepare_for_addition($state, $pkgname, $set)
|
||||
sub prepare_for_addition
|
||||
sub prepare_for_addition($, $, $, $)
|
||||
{
|
||||
}
|
||||
|
||||
# $self->find_extractible($state, $wanted, $tied):
|
||||
# sort item into wanted (needed from archive) / tied (already there)
|
||||
sub find_extractible
|
||||
sub find_extractible($, $, $, $)
|
||||
{
|
||||
}
|
||||
|
||||
sub extract
|
||||
sub extract($self, $state)
|
||||
{
|
||||
my ($self, $state) = @_;
|
||||
$state->{partial}{$self} = 1;
|
||||
if ($state->{interrupted}) {
|
||||
die "Interrupted";
|
||||
}
|
||||
}
|
||||
|
||||
sub install
|
||||
sub install($self, $state)
|
||||
{
|
||||
my ($self, $state) = @_;
|
||||
# XXX "normal" items are already in partial, but NOT stuff
|
||||
# that's install-only, like symlinks and dirs...
|
||||
$state->{partial}{$self} = 1;
|
||||
|
@ -308,14 +289,13 @@ sub install
|
|||
}
|
||||
}
|
||||
|
||||
sub copy_info
|
||||
# $self->copy_info($dest, $state)
|
||||
sub copy_info($, $, $)
|
||||
{
|
||||
}
|
||||
|
||||
sub set_modes
|
||||
sub set_modes($self, $state, $name)
|
||||
{
|
||||
my ($self, $state, $name) = @_;
|
||||
|
||||
if (defined $self->{owner} || defined $self->{group}) {
|
||||
require OpenBSD::IdCache;
|
||||
|
||||
|
@ -350,14 +330,13 @@ package OpenBSD::PackingElement::Meta;
|
|||
|
||||
# XXX stuff that's invisible to find_extractible should be considered extracted
|
||||
# for the most part, otherwise we create broken partial packages
|
||||
sub find_extractible
|
||||
sub find_extractible($self, $state, $wanted, $tied)
|
||||
{
|
||||
my ($self, $state, $wanted, $tied) = @_;
|
||||
$state->{partial}{$self} = 1;
|
||||
}
|
||||
|
||||
package OpenBSD::PackingElement::Cwd;
|
||||
sub find_extractible
|
||||
sub find_extractible # forwarder
|
||||
{
|
||||
&OpenBSD::PackingElement::Meta::find_extractible;
|
||||
}
|
||||
|
@ -365,10 +344,8 @@ sub find_extractible
|
|||
package OpenBSD::PackingElement::ExtraInfo;
|
||||
use OpenBSD::Error;
|
||||
|
||||
sub prepare_for_addition
|
||||
sub prepare_for_addition($self, $state, $pkgname, $)
|
||||
{
|
||||
my ($self, $state, $pkgname) = @_;
|
||||
|
||||
if ($state->{ftp_only} && $self->{ftp} ne 'yes') {
|
||||
$state->errsay("Package #1 is not for ftp", $pkgname);
|
||||
$state->{problems}++;
|
||||
|
@ -378,13 +355,11 @@ sub prepare_for_addition
|
|||
package OpenBSD::PackingElement::NewAuth;
|
||||
use OpenBSD::Error;
|
||||
|
||||
sub add_entry
|
||||
sub add_entry($, $l, @p)
|
||||
{
|
||||
shift; # get rid of self
|
||||
my $l = shift;
|
||||
while (@_ >= 2) {
|
||||
my $f = shift;
|
||||
my $v = shift;
|
||||
while (@p >= 2) {
|
||||
my $f = shift @p;
|
||||
my $v = shift @p;
|
||||
next if !defined $v or $v eq '';
|
||||
if ($v =~ m/^\!(.*)$/o) {
|
||||
push(@$l, $f, $1);
|
||||
|
@ -394,9 +369,8 @@ sub add_entry
|
|||
}
|
||||
}
|
||||
|
||||
sub prepare_for_addition
|
||||
sub prepare_for_addition($self, $state, $pkgname, $)
|
||||
{
|
||||
my ($self, $state, $pkgname) = @_;
|
||||
my $ok = $self->check;
|
||||
if (defined $ok) {
|
||||
if ($ok == 0) {
|
||||
|
@ -408,9 +382,8 @@ sub prepare_for_addition
|
|||
$self->{okay} = $ok;
|
||||
}
|
||||
|
||||
sub install
|
||||
sub install($self, $state)
|
||||
{
|
||||
my ($self, $state) = @_;
|
||||
$self->SUPER::install($state);
|
||||
my $auth = $self->name;
|
||||
$state->say("adding #1 #2", $self->type, $auth) if $state->verbose >= 2;
|
||||
|
@ -424,12 +397,10 @@ sub install
|
|||
|
||||
package OpenBSD::PackingElement::NewUser;
|
||||
|
||||
sub command { OpenBSD::Paths->useradd }
|
||||
sub command($) { OpenBSD::Paths->useradd }
|
||||
|
||||
sub build_args
|
||||
sub build_args($self, $l)
|
||||
{
|
||||
my ($self, $l) = @_;
|
||||
|
||||
$self->add_entry($l,
|
||||
'-u', $self->{uid},
|
||||
'-g', $self->{group},
|
||||
|
@ -441,12 +412,10 @@ sub build_args
|
|||
|
||||
package OpenBSD::PackingElement::NewGroup;
|
||||
|
||||
sub command { OpenBSD::Paths->groupadd }
|
||||
sub command($) { OpenBSD::Paths->groupadd }
|
||||
|
||||
sub build_args
|
||||
sub build_args($self, $l)
|
||||
{
|
||||
my ($self, $l) = @_;
|
||||
|
||||
$self->add_entry($l, '-g', $self->{gid});
|
||||
}
|
||||
|
||||
|
@ -456,9 +425,8 @@ use File::Basename;
|
|||
use File::Path;
|
||||
use OpenBSD::Temp;
|
||||
|
||||
sub find_extractible
|
||||
sub find_extractible($self, $state, $wanted, $tied)
|
||||
{
|
||||
my ($self, $state, $wanted, $tied) = @_;
|
||||
if ($self->{tieto} || $self->{link} || $self->{symlink}) {
|
||||
$tied->{$self->name} = $self;
|
||||
} else {
|
||||
|
@ -466,9 +434,8 @@ sub find_extractible
|
|||
}
|
||||
}
|
||||
|
||||
sub prepare_for_addition
|
||||
sub prepare_for_addition($self, $state, $pkgname, $)
|
||||
{
|
||||
my ($self, $state, $pkgname) = @_;
|
||||
my $fname = $self->retrieve_fullname($state, $pkgname);
|
||||
# check for collisions with existing stuff
|
||||
if ($state->vstat->exists($fname)) {
|
||||
|
@ -489,9 +456,8 @@ sub prepare_for_addition
|
|||
}
|
||||
}
|
||||
|
||||
sub prepare_to_extract
|
||||
sub prepare_to_extract($self, $state, $file)
|
||||
{
|
||||
my ($self, $state, $file) = @_;
|
||||
my $fullname = $self->fullname;
|
||||
my $destdir = $state->{destdir};
|
||||
|
||||
|
@ -504,9 +470,8 @@ sub prepare_to_extract
|
|||
$file->{destdir} = $destdir;
|
||||
}
|
||||
|
||||
sub find_safe_dir
|
||||
sub find_safe_dir($self, $state)
|
||||
{
|
||||
my ($self, $state) = @_;
|
||||
# figure out a safe directory where to put the temp file
|
||||
|
||||
my $fullname = $self->fullname;
|
||||
|
@ -539,9 +504,8 @@ sub find_safe_dir
|
|||
return $d;
|
||||
}
|
||||
|
||||
sub create_temp
|
||||
sub create_temp($self, $d, $state)
|
||||
{
|
||||
my ($self, $d, $state) = @_;
|
||||
my $fullname = $self->fullname;
|
||||
my ($fh, $tempname) = OpenBSD::Temp::permanent_file($d, "pkg");
|
||||
$self->{tempname} = $tempname;
|
||||
|
@ -556,9 +520,8 @@ sub create_temp
|
|||
return ($fh, $tempname);
|
||||
}
|
||||
|
||||
sub may_create_temp
|
||||
sub may_create_temp($self, $d, $state)
|
||||
{
|
||||
my ($self, $d, $state) = @_;
|
||||
if ($self->{avoid_temp}) {
|
||||
if (open(my $fh, '>', $self->{avoid_temp})) {
|
||||
return ($fh, $self->{avoid_temp});
|
||||
|
@ -568,9 +531,8 @@ sub may_create_temp
|
|||
return $self->create_temp($d, $state);
|
||||
}
|
||||
|
||||
sub tie
|
||||
sub tie($self, $state)
|
||||
{
|
||||
my ($self, $state) = @_;
|
||||
if (defined $self->{link} || defined $self->{symlink}) {
|
||||
return;
|
||||
}
|
||||
|
@ -602,10 +564,8 @@ sub tie
|
|||
}
|
||||
|
||||
|
||||
sub extract
|
||||
sub extract($self, $state, $file)
|
||||
{
|
||||
my ($self, $state, $file) = @_;
|
||||
|
||||
$self->SUPER::extract($state);
|
||||
|
||||
my $d = $self->find_safe_dir($state);
|
||||
|
@ -636,9 +596,8 @@ sub extract
|
|||
}
|
||||
}
|
||||
|
||||
sub install
|
||||
sub install($self, $state)
|
||||
{
|
||||
my ($self, $state) = @_;
|
||||
$self->SUPER::install($state);
|
||||
my $fullname = $self->fullname;
|
||||
my $destdir = $state->{destdir};
|
||||
|
@ -677,17 +636,14 @@ sub install
|
|||
}
|
||||
|
||||
package OpenBSD::PackingElement::Extra;
|
||||
sub find_extractible
|
||||
sub find_extractible($self, $state, $wanted, $tied)
|
||||
{
|
||||
my ($self, $state, $wanted, $tied) = @_;
|
||||
|
||||
$state->{current_set}{known_extra}{$self->fullname} = 1;
|
||||
}
|
||||
|
||||
package OpenBSD::PackingElement::RcScript;
|
||||
sub install
|
||||
sub install($self, $state)
|
||||
{
|
||||
my ($self, $state) = @_;
|
||||
$state->{add_rcscripts}{$self->fullname} = 1;
|
||||
$self->SUPER::install($state);
|
||||
}
|
||||
|
@ -696,9 +652,8 @@ package OpenBSD::PackingElement::Sample;
|
|||
use OpenBSD::Error;
|
||||
use File::Copy;
|
||||
|
||||
sub prepare_for_addition
|
||||
sub prepare_for_addition($self, $state, $pkgname, $)
|
||||
{
|
||||
my ($self, $state, $pkgname) = @_;
|
||||
if (!defined $self->{copyfrom}) {
|
||||
$state->errsay("\@sample element #1 does not reference a valid file",
|
||||
$self->fullname);
|
||||
|
@ -720,22 +675,18 @@ sub prepare_for_addition
|
|||
}
|
||||
}
|
||||
|
||||
sub find_extractible
|
||||
sub find_extractible($self, $state, $wanted, $tied)
|
||||
{
|
||||
my ($self, $state, $wanted, $tied) = @_;
|
||||
|
||||
$state->{current_set}{known_sample}{$self->fullname} = 1;
|
||||
}
|
||||
|
||||
# $self->extract($state)
|
||||
sub extract
|
||||
sub extract($, $)
|
||||
{
|
||||
}
|
||||
|
||||
sub install
|
||||
sub install($self, $state)
|
||||
{
|
||||
my ($self, $state) = @_;
|
||||
|
||||
$self->SUPER::install($state);
|
||||
my $destdir = $state->{destdir};
|
||||
my $filename = $destdir.$self->fullname;
|
||||
|
@ -776,20 +727,19 @@ sub install
|
|||
}
|
||||
|
||||
package OpenBSD::PackingElement::Sampledir;
|
||||
sub extract
|
||||
sub extract($, $)
|
||||
{
|
||||
}
|
||||
|
||||
sub install
|
||||
sub install # forwarder
|
||||
{
|
||||
&OpenBSD::PackingElement::Dir::install;
|
||||
}
|
||||
|
||||
package OpenBSD::PackingElement::Mandir;
|
||||
|
||||
sub install
|
||||
sub install($self, $state)
|
||||
{
|
||||
my ($self, $state) = @_;
|
||||
$self->SUPER::install($state);
|
||||
if (!$state->{current_set}{known_mandirs}{$self->fullname}) {
|
||||
$state->log("You may wish to add #1 to /etc/man.conf",
|
||||
|
@ -799,9 +749,8 @@ sub install
|
|||
|
||||
package OpenBSD::PackingElement::Manpage;
|
||||
|
||||
sub install
|
||||
sub install($self, $state)
|
||||
{
|
||||
my ($self, $state) = @_;
|
||||
$self->SUPER::install($state);
|
||||
$self->register_manpage($state, 'addman');
|
||||
}
|
||||
|
@ -810,9 +759,8 @@ package OpenBSD::PackingElement::InfoFile;
|
|||
use File::Basename;
|
||||
use OpenBSD::Error;
|
||||
|
||||
sub install
|
||||
sub install($self, $state)
|
||||
{
|
||||
my ($self, $state) = @_;
|
||||
$self->SUPER::install($state);
|
||||
return if $state->{not};
|
||||
my $fullname = $state->{destdir}.$self->fullname;
|
||||
|
@ -821,9 +769,8 @@ sub install
|
|||
}
|
||||
|
||||
package OpenBSD::PackingElement::Shell;
|
||||
sub install
|
||||
sub install($self, $state)
|
||||
{
|
||||
my ($self, $state) = @_;
|
||||
$self->SUPER::install($state);
|
||||
return if $state->{not};
|
||||
my $fullname = $self->fullname;
|
||||
|
@ -843,9 +790,8 @@ sub install
|
|||
}
|
||||
|
||||
package OpenBSD::PackingElement::Dir;
|
||||
sub extract
|
||||
sub extract($self, $state)
|
||||
{
|
||||
my ($self, $state) = @_;
|
||||
my $fullname = $self->fullname;
|
||||
my $destdir = $state->{destdir};
|
||||
|
||||
|
@ -857,9 +803,8 @@ sub extract
|
|||
$state->make_path($destdir.$fullname, $fullname);
|
||||
}
|
||||
|
||||
sub install
|
||||
sub install($self, $state)
|
||||
{
|
||||
my ($self, $state) = @_;
|
||||
$self->SUPER::install($state);
|
||||
my $fullname = $self->fullname;
|
||||
my $destdir = $state->{destdir};
|
||||
|
@ -874,38 +819,32 @@ sub install
|
|||
package OpenBSD::PackingElement::Exec;
|
||||
use OpenBSD::Error;
|
||||
|
||||
sub install
|
||||
sub install($self, $state)
|
||||
{
|
||||
my ($self, $state) = @_;
|
||||
|
||||
$self->SUPER::install($state);
|
||||
if ($self->should_run($state)) {
|
||||
$self->run($state);
|
||||
}
|
||||
}
|
||||
|
||||
sub should_run() { 1 }
|
||||
sub should_run($, $) { 1 }
|
||||
|
||||
package OpenBSD::PackingElement::ExecAdd;
|
||||
sub should_run
|
||||
sub should_run($self, $state)
|
||||
{
|
||||
my ($self, $state) = @_;
|
||||
return !$state->replacing;
|
||||
}
|
||||
|
||||
package OpenBSD::PackingElement::ExecUpdate;
|
||||
sub should_run
|
||||
sub should_run($self, $state)
|
||||
{
|
||||
my ($self, $state) = @_;
|
||||
return $state->replacing;
|
||||
}
|
||||
|
||||
package OpenBSD::PackingElement::Tag;
|
||||
|
||||
sub install
|
||||
sub install($self, $state)
|
||||
{
|
||||
my ($self, $state) = @_;
|
||||
|
||||
for my $d (@{$self->{definition_list}}) {
|
||||
$d->add_tag($self, "install", $state);
|
||||
}
|
||||
|
@ -913,9 +852,8 @@ sub install
|
|||
|
||||
package OpenBSD::PackingElement::Lib;
|
||||
|
||||
sub install
|
||||
sub install($self, $state)
|
||||
{
|
||||
my ($self, $state) = @_;
|
||||
$self->SUPER::install($state);
|
||||
$self->mark_ldconfig_directory($state);
|
||||
}
|
||||
|
@ -924,9 +862,8 @@ package OpenBSD::PackingElement::SpecialFile;
|
|||
use OpenBSD::PackageInfo;
|
||||
use OpenBSD::Error;
|
||||
|
||||
sub copy_info
|
||||
sub copy_info($self, $dest, $state)
|
||||
{
|
||||
my ($self, $dest, $state) = @_;
|
||||
require File::Copy;
|
||||
|
||||
File::Copy::move($self->fullname, $dest) or
|
||||
|
@ -934,27 +871,24 @@ sub copy_info
|
|||
$self->fullname, $dest, $!);
|
||||
}
|
||||
|
||||
sub extract
|
||||
sub extract($self, $state)
|
||||
{
|
||||
my ($self, $state) = @_;
|
||||
$self->may_verify_digest($state);
|
||||
}
|
||||
|
||||
sub find_extractible
|
||||
sub find_extractible($self, $state, $, $)
|
||||
{
|
||||
my ($self, $state) = @_;
|
||||
$self->may_verify_digest($state);
|
||||
}
|
||||
|
||||
package OpenBSD::PackingElement::FCONTENTS;
|
||||
sub copy_info
|
||||
sub copy_info($, $, $)
|
||||
{
|
||||
}
|
||||
|
||||
package OpenBSD::PackingElement::AskUpdate;
|
||||
sub prepare_for_addition
|
||||
sub prepare_for_addition($self, $state, $pkgname, $set)
|
||||
{
|
||||
my ($self, $state, $pkgname, $set) = @_;
|
||||
my @old = $set->older_names;
|
||||
if ($self->spec->match_ref(\@old) > 0) {
|
||||
my $key = "update_".OpenBSD::PackageName::splitstem($pkgname);
|
||||
|
@ -974,9 +908,8 @@ sub prepare_for_addition
|
|||
}
|
||||
|
||||
package OpenBSD::PackingElement::FDISPLAY;
|
||||
sub install
|
||||
sub install($self, $state)
|
||||
{
|
||||
my ($self, $state) = @_;
|
||||
my $d = $self->{d};
|
||||
if (!$state->{current_set}{known_displays}{$self->{d}->key}) {
|
||||
$self->prepare($state);
|
||||
|
@ -985,9 +918,8 @@ sub install
|
|||
}
|
||||
|
||||
package OpenBSD::PackingElement::FUNDISPLAY;
|
||||
sub find_extractible
|
||||
sub find_extractible($self, $state, $wanted, $tied)
|
||||
{
|
||||
my ($self, $state, $wanted, $tied) = @_;
|
||||
$state->{current_set}{known_displays}{$self->{d}->key} = 1;
|
||||
$self->SUPER::find_extractible($state, $wanted, $tied);
|
||||
}
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
# ex:ts=8 sw=4:
|
||||
# $OpenBSD: AddCreateDelete.pm,v 1.51 2023/05/27 09:59:51 espie Exp $
|
||||
# $OpenBSD: AddCreateDelete.pm,v 1.52 2023/06/13 09:07:16 espie Exp $
|
||||
#
|
||||
# Copyright (c) 2007-2014 Marc Espie <espie@openbsd.org>
|
||||
#
|
||||
|
@ -16,8 +16,7 @@
|
|||
# OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
||||
#
|
||||
|
||||
use strict;
|
||||
use warnings;
|
||||
use v5.36;
|
||||
|
||||
# common behavior to pkg_add, pkg_delete, pkg_create
|
||||
|
||||
|
@ -27,61 +26,42 @@ our @ISA = qw(OpenBSD::State);
|
|||
use OpenBSD::State;
|
||||
use OpenBSD::ProgressMeter;
|
||||
|
||||
sub init
|
||||
sub init($self, @p)
|
||||
{
|
||||
my $self = shift;
|
||||
|
||||
$self->{progressmeter} = OpenBSD::ProgressMeter->new;
|
||||
$self->{bad} = 0;
|
||||
$self->SUPER::init(@_);
|
||||
$self->SUPER::init(@p);
|
||||
$self->{export_level}++;
|
||||
}
|
||||
|
||||
sub progress
|
||||
sub progress($self)
|
||||
{
|
||||
my $self = shift;
|
||||
return $self->{progressmeter};
|
||||
}
|
||||
|
||||
sub not
|
||||
sub not($self)
|
||||
{
|
||||
my $self = shift;
|
||||
return $self->{not};
|
||||
}
|
||||
|
||||
sub sync_display
|
||||
sub sync_display($self)
|
||||
{
|
||||
my $self = shift;
|
||||
$self->progress->clear;
|
||||
}
|
||||
|
||||
sub add_interactive_options
|
||||
sub add_interactive_options($self)
|
||||
{
|
||||
my $self = shift;
|
||||
$self->{has_interactive_options} = 1;
|
||||
return $self;
|
||||
}
|
||||
|
||||
sub interactive_class
|
||||
sub handle_options($state, $opt_string, @usage)
|
||||
{
|
||||
my ($class, $i) = @_;
|
||||
if ($i) {
|
||||
require OpenBSD::Interactive;
|
||||
return 'OpenBSD::Interactive';
|
||||
} else {
|
||||
return 'OpenBSD::InteractiveStub';
|
||||
}
|
||||
}
|
||||
|
||||
sub handle_options
|
||||
{
|
||||
my ($state, $opt_string, @usage) = @_;
|
||||
|
||||
my $i;
|
||||
|
||||
if ($state->{has_interactive_options}) {
|
||||
$opt_string .= 'iI';
|
||||
$state->{opt}{i} = sub {
|
||||
$state->{opt}{i} = sub() {
|
||||
$i++;
|
||||
};
|
||||
};
|
||||
|
@ -100,64 +80,65 @@ sub handle_options
|
|||
$state->{interactive} = $state->interactive_class($i)->new($state, $i);
|
||||
}
|
||||
|
||||
|
||||
sub is_interactive
|
||||
sub interactive_class($, $i)
|
||||
{
|
||||
return shift->{interactive}->is_interactive;
|
||||
if ($i) {
|
||||
require OpenBSD::Interactive;
|
||||
return 'OpenBSD::Interactive';
|
||||
} else {
|
||||
return 'OpenBSD::InteractiveStub';
|
||||
}
|
||||
}
|
||||
|
||||
sub find_window_size
|
||||
sub is_interactive($self)
|
||||
{
|
||||
return $self->{interactive}->is_interactive;
|
||||
}
|
||||
|
||||
sub find_window_size($state)
|
||||
{
|
||||
my $state = shift;
|
||||
$state->SUPER::find_window_size;
|
||||
$state->{progressmeter}->compute_playfield;
|
||||
}
|
||||
|
||||
sub handle_continue
|
||||
sub handle_continue($state)
|
||||
{
|
||||
my $state = shift;
|
||||
$state->SUPER::handle_continue;
|
||||
$state->{progressmeter}->handle_continue;
|
||||
}
|
||||
|
||||
sub confirm_defaults_to_no
|
||||
sub confirm_defaults_to_no($self, @p)
|
||||
{
|
||||
my $self = shift;
|
||||
return $self->{interactive}->confirm($self->f(@_), 0);
|
||||
return $self->{interactive}->confirm($self->f(@p), 0);
|
||||
}
|
||||
|
||||
sub confirm_defaults_to_yes
|
||||
sub confirm_defaults_to_yes($self, @p)
|
||||
{
|
||||
my $self = shift;
|
||||
return $self->{interactive}->confirm($self->f(@_), 1);
|
||||
return $self->{interactive}->confirm($self->f(@p), 1);
|
||||
}
|
||||
|
||||
sub ask_list
|
||||
sub ask_list($self, @p)
|
||||
{
|
||||
my $self = shift;
|
||||
return $self->{interactive}->ask_list(@_);
|
||||
return $self->{interactive}->ask_list(@p);
|
||||
}
|
||||
|
||||
sub vsystem
|
||||
sub vsystem($self, @p)
|
||||
{
|
||||
my $self = shift;
|
||||
if ($self->verbose < 2) {
|
||||
$self->system(@_);
|
||||
$self->system(@p);
|
||||
} else {
|
||||
$self->verbose_system(@_);
|
||||
$self->verbose_system(@p);
|
||||
}
|
||||
}
|
||||
|
||||
sub system
|
||||
sub system($self, @p)
|
||||
{
|
||||
my $self = shift;
|
||||
$self->SUPER::system(@_);
|
||||
$self->SUPER::system(@p);
|
||||
}
|
||||
|
||||
sub run_makewhatis
|
||||
sub run_makewhatis($state, $opts, $l)
|
||||
{
|
||||
my ($state, $opts, $l) = @_;
|
||||
my $braindead = sub { chdir('/'); };
|
||||
my $braindead = sub() { chdir('/'); };
|
||||
while (@$l > 1000) {
|
||||
my @b = splice(@$l, 0, 1000);
|
||||
$state->vsystem($braindead,
|
||||
|
@ -167,43 +148,36 @@ sub run_makewhatis
|
|||
OpenBSD::Paths->makewhatis, @$opts, '--', @$l);
|
||||
}
|
||||
|
||||
# TODO the maze of ntogo/todo/... is a mess
|
||||
sub ntogo
|
||||
# TODO this stuff is definitely not as clear as it could be
|
||||
sub ntogo($self, $offset = 0)
|
||||
{
|
||||
my ($self, $offset) = @_;
|
||||
|
||||
return $self->{wantntogo} ?
|
||||
$self->progress->ntogo($self, $offset) :
|
||||
$self->f("ok");
|
||||
}
|
||||
|
||||
sub ntogo_string
|
||||
sub ntogo_string($self, $offset = 0)
|
||||
{
|
||||
my ($self, $offset) = @_;
|
||||
|
||||
return $self->{wantntogo} ?
|
||||
$self->f(" (#1)", $self->ntodo($offset // 0)) :
|
||||
$self->f(" (#1)", $self->ntodo($offset)) :
|
||||
$self->f("");
|
||||
}
|
||||
|
||||
sub solve_dependency
|
||||
sub solve_dependency($self, $solver, $dep, $package)
|
||||
{
|
||||
my ($self, $solver, $dep, $package) = @_;
|
||||
return $solver->really_solve_dependency($self, $dep, $package);
|
||||
}
|
||||
|
||||
package OpenBSD::AddCreateDelete;
|
||||
use OpenBSD::Error;
|
||||
|
||||
sub handle_options
|
||||
sub handle_options($self, $opt_string, $state, @usage)
|
||||
{
|
||||
my ($self, $opt_string, $state, @usage) = @_;
|
||||
$state->handle_options($opt_string, $self, @usage);
|
||||
}
|
||||
|
||||
sub try_and_run_command
|
||||
sub try_and_run_command($self, $state)
|
||||
{
|
||||
my ($self, $state) = @_;
|
||||
if ($state->defines('pkg-debug')) {
|
||||
$self->run_command($state);
|
||||
} else {
|
||||
|
@ -221,25 +195,22 @@ sub try_and_run_command
|
|||
}
|
||||
|
||||
package OpenBSD::InteractiveStub;
|
||||
sub new
|
||||
sub new($class, $, $)
|
||||
{
|
||||
my $class = shift;
|
||||
bless {}, $class;
|
||||
}
|
||||
|
||||
sub ask_list
|
||||
sub ask_list($, $, @values)
|
||||
{
|
||||
my ($self, $prompt, @values) = @_;
|
||||
return $values[0];
|
||||
}
|
||||
|
||||
sub confirm
|
||||
sub confirm($, $, $yesno)
|
||||
{
|
||||
my ($self, $prompt, $yesno) = @_;
|
||||
return $yesno;
|
||||
}
|
||||
|
||||
sub is_interactive
|
||||
sub is_interactive($)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
# ex:ts=8 sw=4:
|
||||
# $OpenBSD: AddDelete.pm,v 1.98 2023/05/27 10:00:23 espie Exp $
|
||||
# $OpenBSD: AddDelete.pm,v 1.99 2023/06/13 09:07:17 espie Exp $
|
||||
#
|
||||
# Copyright (c) 2007-2010 Marc Espie <espie@openbsd.org>
|
||||
#
|
||||
|
@ -16,39 +16,34 @@
|
|||
# OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
||||
#
|
||||
|
||||
use strict;
|
||||
use warnings;
|
||||
use v5.36;
|
||||
|
||||
# common behavior to pkg_add / pkg_delete
|
||||
package main;
|
||||
our $not;
|
||||
|
||||
package OpenBSD::PackingElement::FileObject;
|
||||
sub retrieve_fullname
|
||||
sub retrieve_fullname($self, $state, $pkgname)
|
||||
{
|
||||
my ($self, $state, $pkgname) = @_;
|
||||
return $state->{destdir}.$self->fullname;
|
||||
}
|
||||
|
||||
package OpenBSD::PackingElement::FileBase;
|
||||
sub retrieve_size
|
||||
sub retrieve_size($self)
|
||||
{
|
||||
my $self = shift;
|
||||
return $self->{size};
|
||||
}
|
||||
|
||||
package OpenBSD::PackingElement::SpecialFile;
|
||||
use OpenBSD::PackageInfo;
|
||||
sub retrieve_fullname
|
||||
sub retrieve_fullname($self, $state, $pkgname)
|
||||
{
|
||||
my ($self, $state, $pkgname);
|
||||
return installed_info($pkgname).$self->name;
|
||||
}
|
||||
|
||||
package OpenBSD::PackingElement::FCONTENTS;
|
||||
sub retrieve_size
|
||||
sub retrieve_size($self)
|
||||
{
|
||||
my $self = shift;
|
||||
my $size = 0;
|
||||
my $cname = $self->fullname;
|
||||
if (defined $cname) {
|
||||
|
@ -65,10 +60,8 @@ use OpenBSD::PackageInfo;
|
|||
use OpenBSD::AddCreateDelete;
|
||||
our @ISA = qw(OpenBSD::AddCreateDelete);
|
||||
|
||||
sub do_the_main_work
|
||||
sub do_the_main_work($self, $state)
|
||||
{
|
||||
my ($self, $state) = @_;
|
||||
|
||||
if ($state->{bad}) {
|
||||
return;
|
||||
}
|
||||
|
@ -91,24 +84,20 @@ sub do_the_main_work
|
|||
return $dielater;
|
||||
}
|
||||
|
||||
sub handle_end_tags
|
||||
sub handle_end_tags($self, $state)
|
||||
{
|
||||
my ($self, $state) = @_;
|
||||
return if !defined $state->{tags}{atend};
|
||||
$state->progress->for_list("Running tags",
|
||||
[keys %{$state->{tags}{atend}}],
|
||||
sub {
|
||||
my $k = shift;
|
||||
sub($k) {
|
||||
return if $state->{tags}{deleted}{$k};
|
||||
return if $state->{tags}{superseded}{$k};
|
||||
$state->{tags}{atend}{$k}->run_tag($state);
|
||||
});
|
||||
}
|
||||
|
||||
sub run_command
|
||||
sub run_command($self, $state)
|
||||
{
|
||||
my ($self, $state) = @_;
|
||||
|
||||
lock_db($state->{not}, $state) unless $state->defines('nolock');
|
||||
$state->check_root;
|
||||
$self->process_parameters($state);
|
||||
|
@ -129,10 +118,8 @@ sub run_command
|
|||
rethrow $dielater;
|
||||
}
|
||||
|
||||
sub parse_and_run
|
||||
sub parse_and_run($self, $cmd)
|
||||
{
|
||||
my ($self, $cmd) = @_;
|
||||
|
||||
my $state = $self->new_state($cmd);
|
||||
$state->handle_options;
|
||||
|
||||
|
@ -167,19 +154,17 @@ sub parse_and_run
|
|||
}
|
||||
|
||||
# $self->silence_children($state)
|
||||
sub silence_children
|
||||
sub silence_children($, $)
|
||||
{
|
||||
1
|
||||
}
|
||||
|
||||
# nothing to do
|
||||
sub tweak_list
|
||||
sub tweak_list($, $)
|
||||
{
|
||||
}
|
||||
|
||||
sub process_setlist
|
||||
sub process_setlist($self, $state)
|
||||
{
|
||||
my ($self, $state) = @_;
|
||||
$state->tracker->todo(@{$state->{setlist}});
|
||||
# this is the actual very small loop that processes all sets
|
||||
while (my $set = shift @{$state->{setlist}}) {
|
||||
|
@ -193,22 +178,19 @@ sub process_setlist
|
|||
}
|
||||
|
||||
package OpenBSD::SharedItemsRecorder;
|
||||
sub new
|
||||
sub new($class)
|
||||
{
|
||||
my $class = shift;
|
||||
return bless {}, $class;
|
||||
}
|
||||
|
||||
sub is_empty
|
||||
sub is_empty($self)
|
||||
{
|
||||
my $self = shift;
|
||||
return !(defined $self->{dirs} or defined $self->{users} or
|
||||
defined $self->{groups});
|
||||
}
|
||||
|
||||
sub cleanup
|
||||
sub cleanup($self, $state)
|
||||
{
|
||||
my ($self, $state) = @_;
|
||||
return if $self->is_empty or $state->{not};
|
||||
|
||||
require OpenBSD::SharedItems;
|
||||
|
@ -220,12 +202,10 @@ use OpenBSD::Vstat;
|
|||
use OpenBSD::Log;
|
||||
our @ISA = qw(OpenBSD::AddCreateDelete::State);
|
||||
|
||||
sub handle_options
|
||||
sub handle_options($state, $opt_string, @usage)
|
||||
{
|
||||
my ($state, $opt_string, @usage) = @_;
|
||||
|
||||
$state->{extra_stats} = 0;
|
||||
$state->{opt}{V} = sub {
|
||||
$state->{opt}{V} = sub() {
|
||||
$state->{extra_stats}++;
|
||||
};
|
||||
$state->{no_exports} = 1;
|
||||
|
@ -271,52 +251,46 @@ sub handle_options
|
|||
$state->{destdir} = $base;
|
||||
}
|
||||
|
||||
sub init
|
||||
sub init($self, @p)
|
||||
{
|
||||
my $self = shift;
|
||||
$self->{l} = OpenBSD::Log->new($self);
|
||||
$self->{vstat} = OpenBSD::Vstat->new($self);
|
||||
$self->{status} = OpenBSD::Status->new;
|
||||
$self->{recorder} = OpenBSD::SharedItemsRecorder->new;
|
||||
$self->{v} = 0;
|
||||
$self->SUPER::init(@_);
|
||||
$self->SUPER::init(@p);
|
||||
$self->{export_level}++;
|
||||
}
|
||||
|
||||
sub syslog
|
||||
sub syslog($self, @p)
|
||||
{
|
||||
my $self = shift;
|
||||
return unless $self->{loglevel};
|
||||
Sys::Syslog::syslog('info', $self->f(@_));
|
||||
Sys::Syslog::syslog('info', $self->f(@p));
|
||||
}
|
||||
|
||||
sub ntodo
|
||||
sub ntodo($state, $offset)
|
||||
{
|
||||
my ($state, $offset) = @_;
|
||||
return $state->tracker->sets_todo($offset);
|
||||
}
|
||||
|
||||
# one-level dependencies tree, for nicer printouts
|
||||
sub build_deptree
|
||||
sub build_deptree($state, $set, @deps)
|
||||
{
|
||||
my ($state, $set, @deps) = @_;
|
||||
|
||||
if (defined $state->{deptree}{$set}) {
|
||||
$set = $state->{deptree}{$set};
|
||||
}
|
||||
for my $dep (@deps) {
|
||||
$state->{deptree}{$dep} = $set unless
|
||||
defined $state->{deptree}{$dep};
|
||||
$state->{deptree}{$dep} = $set
|
||||
unless defined $state->{deptree}{$dep};
|
||||
}
|
||||
}
|
||||
|
||||
sub deptree_header
|
||||
sub deptree_header($state, $pkg)
|
||||
{
|
||||
my ($state, $pkg) = @_;
|
||||
if (defined $state->{deptree}->{$pkg}) {
|
||||
my $s = $state->{deptree}->{$pkg}->real_set;
|
||||
if (defined $state->{deptree}{$pkg}) {
|
||||
my $s = $state->{deptree}{$pkg}->real_set;
|
||||
if ($s eq $pkg) {
|
||||
delete $state->{deptree}->{$pkg};
|
||||
delete $state->{deptree}{$pkg};
|
||||
} else {
|
||||
return $s->short_print.':';
|
||||
}
|
||||
|
@ -324,26 +298,22 @@ sub deptree_header
|
|||
return '';
|
||||
}
|
||||
|
||||
sub vstat
|
||||
sub vstat($self)
|
||||
{
|
||||
my $self = shift;
|
||||
return $self->{vstat};
|
||||
}
|
||||
|
||||
sub log
|
||||
sub log($self, @p)
|
||||
{
|
||||
my $self = shift;
|
||||
if (@_ == 0) {
|
||||
if (@p == 0) {
|
||||
return $self->{l};
|
||||
} else {
|
||||
$self->{l}->say(@_);
|
||||
$self->{l}->say(@p);
|
||||
}
|
||||
}
|
||||
|
||||
sub run_quirks
|
||||
sub run_quirks($state, $sub)
|
||||
{
|
||||
my ($state, $sub) = @_;
|
||||
|
||||
if (!exists $state->{quirks}) {
|
||||
eval {
|
||||
use lib ('/usr/local/libdata/perl5/site_perl');
|
||||
|
@ -373,9 +343,8 @@ sub run_quirks
|
|||
}
|
||||
}
|
||||
|
||||
sub check_root
|
||||
sub check_root($state)
|
||||
{
|
||||
my $state = shift;
|
||||
if ($< && !$state->defines('nonroot')) {
|
||||
if ($state->{not}) {
|
||||
$state->errsay("#1 should be run as root",
|
||||
|
@ -386,15 +355,13 @@ sub check_root
|
|||
}
|
||||
}
|
||||
|
||||
sub choose_location
|
||||
sub choose_location($state, $name, $list, $is_quirks = 0)
|
||||
{
|
||||
my ($state, $name, $list, $is_quirks) = @_;
|
||||
if (@$list == 0) {
|
||||
if (!$is_quirks) {
|
||||
$state->errsay("Can't find #1", $name);
|
||||
$state->run_quirks(
|
||||
sub {
|
||||
my $quirks = shift;
|
||||
sub($quirks) {
|
||||
$quirks->filter_obsolete([$name], $state);
|
||||
});
|
||||
}
|
||||
|
@ -407,7 +374,7 @@ sub choose_location
|
|||
if ($state->is_interactive) {
|
||||
$h{'<None>'} = undef;
|
||||
$state->progress->clear;
|
||||
my $cmp = sub {
|
||||
my $cmp = sub { # XXX prototypable ?
|
||||
return -1 if !defined $h{$a};
|
||||
return 1 if !defined $h{$b};
|
||||
my $r = $h{$a}->pkgname->to_pattern cmp
|
||||
|
@ -428,36 +395,30 @@ sub choose_location
|
|||
}
|
||||
}
|
||||
|
||||
sub status
|
||||
sub status($self)
|
||||
{
|
||||
my $self = shift;
|
||||
|
||||
return $self->{status};
|
||||
}
|
||||
|
||||
sub replacing
|
||||
sub replacing($self)
|
||||
{
|
||||
my $self = shift;
|
||||
return $self->{replacing};
|
||||
}
|
||||
|
||||
OpenBSD::Auto::cache(ldconfig,
|
||||
sub {
|
||||
my $self = shift;
|
||||
sub($self) {
|
||||
return OpenBSD::LdConfig->new($self);
|
||||
});
|
||||
|
||||
# if we're not running as root, allow some stuff when not under /usr/local
|
||||
sub allow_nonroot
|
||||
sub allow_nonroot($state, $path)
|
||||
{
|
||||
my ($state, $path) = @_;
|
||||
return $state->defines('nonroot') &&
|
||||
$path !~ m,^\Q$state->{localbase}/\E,;
|
||||
}
|
||||
|
||||
sub make_path
|
||||
sub make_path($state, $path, $fullname)
|
||||
{
|
||||
my ($state, $path, $fullname) = @_;
|
||||
require File::Path;
|
||||
if ($state->allow_nonroot($fullname)) {
|
||||
eval {
|
||||
|
@ -471,16 +432,14 @@ sub make_path
|
|||
# this is responsible for running ldconfig when needed
|
||||
package OpenBSD::LdConfig;
|
||||
|
||||
sub new
|
||||
sub new($class, $state)
|
||||
{
|
||||
my ($class, $state) = @_;
|
||||
bless { state => $state, todo => 0 }, $class;
|
||||
}
|
||||
|
||||
# called once to figure out which directories are actually used
|
||||
sub init
|
||||
sub init($self)
|
||||
{
|
||||
my $self = shift;
|
||||
my $state = $self->{state};
|
||||
my $destdir = $state->{destdir};
|
||||
|
||||
|
@ -508,9 +467,8 @@ sub init
|
|||
}
|
||||
|
||||
# called from libs to figure out whether ldconfig should be rerun
|
||||
sub mark_directory
|
||||
sub mark_directory($self, $name)
|
||||
{
|
||||
my ($self, $name) = @_;
|
||||
if (!defined $self->{path}) {
|
||||
$self->init;
|
||||
}
|
||||
|
@ -522,9 +480,8 @@ sub mark_directory
|
|||
}
|
||||
|
||||
# call before running any command (or at end) to run ldconfig just in time
|
||||
sub ensure
|
||||
sub ensure($self)
|
||||
{
|
||||
my $self = shift;
|
||||
if ($self->{todo}) {
|
||||
my $state = $self->{state};
|
||||
$state->vsystem(@{$self->{ldconfig}}, "-R")
|
||||
|
@ -536,12 +493,10 @@ sub ensure
|
|||
# the object that gets displayed during status updates
|
||||
package OpenBSD::Status;
|
||||
|
||||
sub print
|
||||
sub print($self, $state)
|
||||
{
|
||||
my ($self, $state) = @_;
|
||||
|
||||
my $what = $self->{what};
|
||||
$what //= "Processing";
|
||||
$what //= 'Processing';
|
||||
my $object;
|
||||
if (defined $self->{object}) {
|
||||
$object = $self->{object};
|
||||
|
@ -558,33 +513,28 @@ sub print
|
|||
}
|
||||
}
|
||||
|
||||
sub set
|
||||
sub set($self, $set)
|
||||
{
|
||||
my ($self, $set) = @_;
|
||||
delete $self->{object};
|
||||
$self->{set} = $set;
|
||||
return $self;
|
||||
}
|
||||
|
||||
sub object
|
||||
sub object($self, $object)
|
||||
{
|
||||
my ($self, $object) = @_;
|
||||
delete $self->{set};
|
||||
$self->{object} = $object;
|
||||
return $self;
|
||||
}
|
||||
|
||||
sub what
|
||||
sub what($self, $what = undef)
|
||||
{
|
||||
my ($self, $what) = @_;
|
||||
$self->{what} = $what;
|
||||
return $self;
|
||||
}
|
||||
|
||||
sub new
|
||||
sub new($class)
|
||||
{
|
||||
my $class = shift;
|
||||
|
||||
bless {}, $class;
|
||||
}
|
||||
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
# ex:ts=8 sw=4:
|
||||
# $OpenBSD: ArcCheck.pm,v 1.41 2023/05/27 10:00:48 espie Exp $
|
||||
# $OpenBSD: ArcCheck.pm,v 1.42 2023/06/13 09:07:17 espie Exp $
|
||||
#
|
||||
# Copyright (c) 2005-2006 Marc Espie <espie@openbsd.org>
|
||||
#
|
||||
|
@ -34,20 +34,18 @@
|
|||
# $o->validate_meta($item) or
|
||||
# error...
|
||||
|
||||
use strict;
|
||||
use warnings;
|
||||
use v5.36;
|
||||
|
||||
use OpenBSD::Ustar;
|
||||
|
||||
package OpenBSD::Ustar::Object;
|
||||
use POSIX;
|
||||
|
||||
sub is_allowed() { 0 }
|
||||
sub is_allowed($) { 0 }
|
||||
|
||||
# match archive header link name against actual link name
|
||||
sub _check_linkname
|
||||
sub _check_linkname($self, $linkname)
|
||||
{
|
||||
my ($self, $linkname) = @_;
|
||||
my $c = $self->{linkname};
|
||||
if ($self->isHardLink && defined $self->{cwd}) {
|
||||
$c = $self->{cwd}.'/'.$c;
|
||||
|
@ -55,16 +53,13 @@ sub _check_linkname
|
|||
return $c eq $linkname;
|
||||
}
|
||||
|
||||
sub _errsay
|
||||
sub _errsay($o, @msg)
|
||||
{
|
||||
my ($self, @args) = @_;
|
||||
$self->{archive}{state}->errsay(@args);
|
||||
$o->{archive}{state}->errsay(@msg);
|
||||
}
|
||||
|
||||
sub validate_meta
|
||||
sub validate_meta($o, $item)
|
||||
{
|
||||
my ($o, $item) = @_;
|
||||
|
||||
$o->{cwd} = $item->cwd;
|
||||
if (defined $item->{symlink} || $o->isSymLink) {
|
||||
if (!defined $item->{symlink}) {
|
||||
|
@ -120,10 +115,8 @@ sub validate_meta
|
|||
return $o->verify_modes($item);
|
||||
}
|
||||
|
||||
sub _strip_modes
|
||||
sub _strip_modes($o, $item)
|
||||
{
|
||||
my ($o, $item) = @_;
|
||||
|
||||
my $result = $o->{mode};
|
||||
|
||||
# disallow writable files/dirs without explicit annotation
|
||||
|
@ -149,16 +142,14 @@ sub _strip_modes
|
|||
return $result;
|
||||
}
|
||||
|
||||
sub _printable_mode
|
||||
sub _printable_mode($o)
|
||||
{
|
||||
my $o = shift;
|
||||
return sprintf("%4o",
|
||||
$o->{mode} & (S_IRWXU | S_IRWXG | S_IRWXO | S_ISUID | S_ISGID));
|
||||
}
|
||||
|
||||
sub verify_modes
|
||||
sub verify_modes($o, $item)
|
||||
{
|
||||
my ($o, $item) = @_;
|
||||
my $result = 1;
|
||||
|
||||
if (!defined $item->{owner}) {
|
||||
|
@ -186,21 +177,20 @@ sub verify_modes
|
|||
}
|
||||
|
||||
package OpenBSD::Ustar::HardLink;
|
||||
sub is_allowed() { 1 }
|
||||
sub is_allowed($) { 1 }
|
||||
|
||||
package OpenBSD::Ustar::SoftLink;
|
||||
sub is_allowed() { 1 }
|
||||
sub is_allowed($) { 1 }
|
||||
|
||||
package OpenBSD::Ustar::File;
|
||||
sub is_allowed() { 1 }
|
||||
sub is_allowed($) { 1 }
|
||||
|
||||
package OpenBSD::Ustar;
|
||||
use POSIX;
|
||||
|
||||
# prepare item according to pkg_create's rules.
|
||||
sub prepare_long
|
||||
sub prepare_long($self, $item)
|
||||
{
|
||||
my ($self, $item) = @_;
|
||||
my $entry;
|
||||
if (defined $item->{wtempname}) {
|
||||
$entry = $self->prepare($item->{wtempname}, '');
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
# ex:ts=8 sw=4:
|
||||
# $OpenBSD: BaseState.pm,v 1.2 2023/06/07 15:09:01 espie Exp $
|
||||
# $OpenBSD: BaseState.pm,v 1.3 2023/06/13 09:07:17 espie Exp $
|
||||
#
|
||||
# Copyright (c) 2007-2022 Marc Espie <espie@openbsd.org>
|
||||
#
|
||||
|
@ -16,36 +16,33 @@
|
|||
# OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
||||
#
|
||||
|
||||
use strict;
|
||||
use warnings;
|
||||
use v5.36;
|
||||
|
||||
package OpenBSD::BaseState;
|
||||
use Carp;
|
||||
|
||||
sub can_output
|
||||
sub can_output($)
|
||||
{
|
||||
1;
|
||||
}
|
||||
sub sync_display
|
||||
sub sync_display($)
|
||||
{
|
||||
}
|
||||
|
||||
my $forbidden = qr{[^[:print:]\s]};
|
||||
|
||||
sub safe
|
||||
sub safe($self, $string)
|
||||
{
|
||||
my ($self, $string) = @_;
|
||||
$string =~ s/$forbidden/?/g;
|
||||
return $string;
|
||||
}
|
||||
|
||||
sub f
|
||||
sub f($self, @p)
|
||||
{
|
||||
my $self = shift;
|
||||
if (@_ == 0) {
|
||||
if (@p == 0) {
|
||||
return undef;
|
||||
}
|
||||
my ($fmt, @l) = @_;
|
||||
my ($fmt, @l) = @p;
|
||||
|
||||
# is there anything to format, actually ?
|
||||
if ($fmt =~ m/\#\d/) {
|
||||
|
@ -60,85 +57,71 @@ sub f
|
|||
return $fmt;
|
||||
}
|
||||
|
||||
sub _fatal
|
||||
sub _fatal($self, @p)
|
||||
{
|
||||
my $self = shift;
|
||||
# implementation note: to print "fatal errors" elsewhere,
|
||||
# the way is to eval { croak @_}; and decide what to do with $@.
|
||||
delete $SIG{__DIE__};
|
||||
$self->sync_display;
|
||||
croak @_, "\n";
|
||||
croak @p, "\n";
|
||||
}
|
||||
|
||||
sub fatal
|
||||
sub fatal($self, @p)
|
||||
{
|
||||
my $self = shift;
|
||||
$self->_fatal($self->f(@_));
|
||||
$self->_fatal($self->f(@p));
|
||||
}
|
||||
|
||||
sub _fhprint
|
||||
sub _fhprint($self, $fh, @p)
|
||||
{
|
||||
my $self = shift;
|
||||
my $fh = shift;
|
||||
$self->sync_display;
|
||||
print $fh @_;
|
||||
print $fh @p;
|
||||
}
|
||||
sub _print
|
||||
sub _print($self, @p)
|
||||
{
|
||||
my $self = shift;
|
||||
$self->_fhprint(\*STDOUT, @_) if $self->can_output;
|
||||
$self->_fhprint(\*STDOUT, @p) if $self->can_output;
|
||||
}
|
||||
|
||||
sub _errprint
|
||||
sub _errprint($self, @p)
|
||||
{
|
||||
my $self = shift;
|
||||
$self->_fhprint(\*STDERR, @_);
|
||||
$self->_fhprint(\*STDERR, @p);
|
||||
}
|
||||
|
||||
sub fhprint
|
||||
sub fhprint($self, $fh, @p)
|
||||
{
|
||||
my $self = shift;
|
||||
my $fh = shift;
|
||||
$self->_fhprint($fh, $self->f(@_));
|
||||
$self->_fhprint($fh, $self->f(@p));
|
||||
}
|
||||
|
||||
sub fhsay
|
||||
sub fhsay($self, $fh, @p)
|
||||
{
|
||||
my $self = shift;
|
||||
my $fh = shift;
|
||||
if (@_ == 0) {
|
||||
if (@p == 0) {
|
||||
$self->_fhprint($fh, "\n");
|
||||
} else {
|
||||
$self->_fhprint($fh, $self->f(@_), "\n");
|
||||
$self->_fhprint($fh, $self->f(@p), "\n");
|
||||
}
|
||||
}
|
||||
|
||||
sub print
|
||||
sub print($self, @p)
|
||||
{
|
||||
my $self = shift;
|
||||
$self->fhprint(\*STDOUT, @_) if $self->can_output;
|
||||
$self->fhprint(\*STDOUT, @p) if $self->can_output;
|
||||
}
|
||||
|
||||
sub say
|
||||
sub say($self, @p)
|
||||
{
|
||||
my $self = shift;
|
||||
$self->fhsay(\*STDOUT, @_) if $self->can_output;
|
||||
$self->fhsay(\*STDOUT, @p) if $self->can_output;
|
||||
}
|
||||
|
||||
sub errprint
|
||||
sub errprint($self, @p)
|
||||
{
|
||||
my $self = shift;
|
||||
$self->fhprint(\*STDERR, @_);
|
||||
$self->fhprint(\*STDERR, @p);
|
||||
}
|
||||
|
||||
sub errsay
|
||||
sub errsay($self, @p)
|
||||
{
|
||||
my $self = shift;
|
||||
$self->fhsay(\*STDERR, @_);
|
||||
$self->fhsay(\*STDERR, @p);
|
||||
}
|
||||
|
||||
my @signal_name = ();
|
||||
sub fillup_names
|
||||
sub fillup_names($)
|
||||
{
|
||||
{
|
||||
# XXX force autoload
|
||||
|
@ -170,10 +153,8 @@ sub fillup_names
|
|||
$signal_name[29] = 'INFO';
|
||||
}
|
||||
|
||||
sub find_signal
|
||||
sub find_signal($self, $number)
|
||||
{
|
||||
my ($self, $number) = @_;
|
||||
|
||||
if (@signal_name == 0) {
|
||||
$self->fillup_names;
|
||||
}
|
||||
|
@ -181,11 +162,8 @@ sub find_signal
|
|||
return $signal_name[$number] || $number;
|
||||
}
|
||||
|
||||
sub child_error
|
||||
sub child_error($self, $error = $?)
|
||||
{
|
||||
my ($self, $error) = @_;
|
||||
$error //= $?;
|
||||
|
||||
my $extra = "";
|
||||
|
||||
if ($error & 128) {
|
||||
|
@ -199,20 +177,19 @@ sub child_error
|
|||
}
|
||||
}
|
||||
|
||||
sub _system
|
||||
sub _system($self, @p)
|
||||
{
|
||||
my $self = shift;
|
||||
$self->sync_display;
|
||||
my ($todo, $todo2);
|
||||
if (ref $_[0] eq 'CODE') {
|
||||
$todo = shift;
|
||||
if (ref $p[0] eq 'CODE') {
|
||||
$todo = shift @p;
|
||||
} else {
|
||||
$todo = sub {};
|
||||
$todo = sub() {};
|
||||
}
|
||||
if (ref $_[0] eq 'CODE') {
|
||||
$todo2 = shift;
|
||||
if (ref $p[0] eq 'CODE') {
|
||||
$todo2 = shift @p;
|
||||
} else {
|
||||
$todo2 = sub {};
|
||||
$todo2 = sub() {};
|
||||
}
|
||||
my $r = fork;
|
||||
if (!defined $r) {
|
||||
|
@ -220,7 +197,7 @@ sub _system
|
|||
} elsif ($r == 0) {
|
||||
$DB::inhibit_exit = 0;
|
||||
&$todo();
|
||||
exec {$_[0]} @_ or
|
||||
exec {$p[0]} @p or
|
||||
exit 1;
|
||||
} else {
|
||||
&$todo2();
|
||||
|
@ -229,27 +206,24 @@ sub _system
|
|||
}
|
||||
}
|
||||
|
||||
sub system
|
||||
sub system($self, @p)
|
||||
{
|
||||
my $self = shift;
|
||||
my $r = $self->_system(@_);
|
||||
my $r = $self->_system(@p);
|
||||
if ($r != 0) {
|
||||
if (ref $_[0] eq 'CODE') {
|
||||
shift;
|
||||
if (ref $p[0] eq 'CODE') {
|
||||
shift @p;
|
||||
}
|
||||
if (ref $_[0] eq 'CODE') {
|
||||
shift;
|
||||
if (ref $p[0] eq 'CODE') {
|
||||
shift @p;
|
||||
}
|
||||
$self->errsay("system(#1) failed: #2",
|
||||
join(", ", @_), $self->child_error);
|
||||
join(", ", @p), $self->child_error);
|
||||
}
|
||||
return $r;
|
||||
}
|
||||
|
||||
sub verbose_system
|
||||
sub verbose_system($self, @p)
|
||||
{
|
||||
my $self = shift;
|
||||
my @p = @_;
|
||||
if (ref $p[0]) {
|
||||
shift @p;
|
||||
}
|
||||
|
@ -258,7 +232,7 @@ sub verbose_system
|
|||
}
|
||||
|
||||
$self->print("Running #1", join(' ', @p));
|
||||
my $r = $self->_system(@_);
|
||||
my $r = $self->_system(@p);
|
||||
if ($r != 0) {
|
||||
$self->say("... failed: #1", $self->child_error);
|
||||
} else {
|
||||
|
@ -266,40 +240,36 @@ sub verbose_system
|
|||
}
|
||||
}
|
||||
|
||||
sub copy_file
|
||||
sub copy_file($self, @p)
|
||||
{
|
||||
my $self = shift;
|
||||
require File::Copy;
|
||||
|
||||
my $r = File::Copy::copy(@_);
|
||||
my $r = File::Copy::copy(@p);
|
||||
if (!$r) {
|
||||
$self->say("copy(#1) failed: #2", join(',', @_), $!);
|
||||
$self->say("copy(#1) failed: #2", join(',', @p), $!);
|
||||
}
|
||||
return $r;
|
||||
}
|
||||
|
||||
sub unlink
|
||||
sub unlink($self, $verbose, @p)
|
||||
{
|
||||
my $self = shift;
|
||||
my $verbose = shift;
|
||||
my $r = unlink @_;
|
||||
if ($r != @_) {
|
||||
my $r = unlink @p;
|
||||
if ($r != @p) {
|
||||
$self->say("rm #1 failed: removed only #2 targets, #3",
|
||||
join(' ', @_), $r, $!);
|
||||
join(' ', @p), $r, $!);
|
||||
} elsif ($verbose) {
|
||||
$self->say("rm #1", join(' ', @_));
|
||||
$self->say("rm #1", join(' ', @p));
|
||||
}
|
||||
return $r;
|
||||
}
|
||||
|
||||
sub copy
|
||||
sub copy($self, @p)
|
||||
{
|
||||
my $self = shift;
|
||||
require File::Copy;
|
||||
|
||||
my $r = File::Copy::copy(@_);
|
||||
my $r = File::Copy::copy(@p);
|
||||
if (!$r) {
|
||||
$self->say("copy(#1) failed: #2", join(',', @_), $!);
|
||||
$self->say("copy(#1) failed: #2", join(',', @p), $!);
|
||||
}
|
||||
return $r;
|
||||
}
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
# ex:ts=8 sw=4:
|
||||
# $OpenBSD: CollisionReport.pm,v 1.48 2019/09/04 12:27:38 espie Exp $
|
||||
# $OpenBSD: CollisionReport.pm,v 1.49 2023/06/13 09:07:17 espie Exp $
|
||||
#
|
||||
# Copyright (c) 2003-2006 Marc Espie <espie@openbsd.org>
|
||||
#
|
||||
|
@ -15,18 +15,16 @@
|
|||
# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
|
||||
# OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
||||
|
||||
use strict;
|
||||
use warnings;
|
||||
use v5.36;
|
||||
|
||||
package OpenBSD::PackingElement;
|
||||
sub handle_collisions
|
||||
sub handle_collisions($, $, $, $)
|
||||
{
|
||||
}
|
||||
|
||||
package OpenBSD::PackingElement::FileBase;
|
||||
sub handle_collisions
|
||||
sub handle_collisions($self, $todo, $pkg, $bypkg)
|
||||
{
|
||||
my ($self, $todo, $pkg, $bypkg) = @_;
|
||||
my $name = $self->fullname;
|
||||
if (defined $todo->{$name}) {
|
||||
push(@{$bypkg->{$pkg}}, $name);
|
||||
|
@ -38,9 +36,8 @@ package OpenBSD::CollisionReport;
|
|||
use OpenBSD::PackingList;
|
||||
use OpenBSD::PackageInfo;
|
||||
|
||||
sub find_collisions
|
||||
sub find_collisions($todo, $state)
|
||||
{
|
||||
my ($todo, $state) = @_;
|
||||
my $verbose = $state->verbose >= 3;
|
||||
my $bypkg = {};
|
||||
for my $name (keys %$todo) {
|
||||
|
@ -68,10 +65,8 @@ sub find_collisions
|
|||
return $bypkg;
|
||||
}
|
||||
|
||||
sub collision_report
|
||||
sub collision_report($list, $state, $set)
|
||||
{
|
||||
my ($list, $state, $set) = @_;
|
||||
|
||||
my $destdir = $state->{destdir};
|
||||
|
||||
if ($state->defines('removecollisions')) {
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
# ex:ts=8 sw=4:
|
||||
# $OpenBSD: Delete.pm,v 1.167 2023/05/27 10:01:08 espie Exp $
|
||||
# $OpenBSD: Delete.pm,v 1.168 2023/06/13 09:07:17 espie Exp $
|
||||
#
|
||||
# Copyright (c) 2003-2014 Marc Espie <espie@openbsd.org>
|
||||
#
|
||||
|
@ -15,8 +15,7 @@
|
|||
# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
|
||||
# OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
||||
|
||||
use strict;
|
||||
use warnings;
|
||||
use v5.36;
|
||||
|
||||
package OpenBSD::Delete;
|
||||
use OpenBSD::Error;
|
||||
|
@ -25,9 +24,8 @@ use OpenBSD::RequiredBy;
|
|||
use OpenBSD::Paths;
|
||||
use File::Basename;
|
||||
|
||||
sub keep_old_files
|
||||
sub keep_old_files($state, $plist)
|
||||
{
|
||||
my ($state, $plist) = @_;
|
||||
my $p = OpenBSD::PackingList->new;
|
||||
my $borked = borked_package($plist->pkgname);
|
||||
$p->set_infodir(installed_info($borked));
|
||||
|
@ -39,9 +37,8 @@ sub keep_old_files
|
|||
return $borked;
|
||||
}
|
||||
|
||||
sub manpages_unindex
|
||||
sub manpages_unindex($state)
|
||||
{
|
||||
my ($state) = @_;
|
||||
return unless defined $state->{rmman};
|
||||
my $destdir = $state->{destdir};
|
||||
|
||||
|
@ -57,17 +54,13 @@ sub manpages_unindex
|
|||
delete $state->{rmman};
|
||||
}
|
||||
|
||||
sub validate_plist
|
||||
sub validate_plist($plist, $state)
|
||||
{
|
||||
my ($plist, $state) = @_;
|
||||
|
||||
$plist->prepare_for_deletion($state, $plist->pkgname);
|
||||
}
|
||||
|
||||
sub remove_packing_info
|
||||
sub remove_packing_info($plist, $state)
|
||||
{
|
||||
my ($plist, $state) = @_;
|
||||
|
||||
my $dir = $plist->infodir;
|
||||
|
||||
for my $fname (info_names()) {
|
||||
|
@ -79,9 +72,8 @@ sub remove_packing_info
|
|||
$state->fatal("can't finish removing directory #1: #2", $dir, $!);
|
||||
}
|
||||
|
||||
sub delete_handle
|
||||
sub delete_handle($handle, $state)
|
||||
{
|
||||
my ($handle, $state) = @_;
|
||||
my $pkgname = $handle->pkgname;
|
||||
my $plist = $handle->plist;
|
||||
if ($plist->has('firmware') && !$state->defines('FW_UPDATE')) {
|
||||
|
@ -107,10 +99,8 @@ sub delete_handle
|
|||
delete_plist($plist, $state);
|
||||
}
|
||||
|
||||
sub unregister_dependencies
|
||||
sub unregister_dependencies($plist, $state)
|
||||
{
|
||||
my ($plist, $state) = @_;
|
||||
|
||||
my $pkgname = $plist->pkgname;
|
||||
my $l = OpenBSD::Requiring->new($pkgname);
|
||||
|
||||
|
@ -127,10 +117,8 @@ sub unregister_dependencies
|
|||
$l->erase;
|
||||
}
|
||||
|
||||
sub delete_plist
|
||||
sub delete_plist($plist, $state)
|
||||
{
|
||||
my ($plist, $state) = @_;
|
||||
|
||||
my $pkgname = $plist->pkgname;
|
||||
$state->{pkgname} = $pkgname;
|
||||
if (!$state->defines('stub')) {
|
||||
|
@ -156,9 +144,8 @@ sub delete_plist
|
|||
|
||||
package OpenBSD::PackingElement;
|
||||
|
||||
sub rename_file_to_temp
|
||||
sub rename_file_to_temp($self, $state)
|
||||
{
|
||||
my ($self, $state) = @_;
|
||||
require OpenBSD::Temp;
|
||||
|
||||
my $n = $self->realname($state);
|
||||
|
@ -181,39 +168,36 @@ sub rename_file_to_temp
|
|||
}
|
||||
|
||||
# $self->prepare_for_deletion($state, $pkgname)
|
||||
sub prepare_for_deletion
|
||||
sub prepare_for_deletion($, $, $)
|
||||
{
|
||||
}
|
||||
|
||||
# $self->delete($state)
|
||||
sub delete
|
||||
sub delete($, $)
|
||||
{
|
||||
}
|
||||
|
||||
# $self->record_shared($recorder, $pkgname)
|
||||
sub record_shared
|
||||
sub record_shared($, $, $)
|
||||
{
|
||||
}
|
||||
|
||||
sub copy_old_stuff
|
||||
sub copy_old_stuff($self, $plist, $state)
|
||||
{
|
||||
}
|
||||
|
||||
package OpenBSD::PackingElement::Cwd;
|
||||
|
||||
sub copy_old_stuff
|
||||
sub copy_old_stuff($self, $plist, $state)
|
||||
{
|
||||
my ($self, $plist, $state) = @_;
|
||||
$self->add_object($plist);
|
||||
}
|
||||
|
||||
package OpenBSD::PackingElement::FileObject;
|
||||
use File::Basename;
|
||||
|
||||
sub mark_directory
|
||||
sub mark_directory($self, $state, $dir)
|
||||
{
|
||||
my ($self, $state, $dir) = @_;
|
||||
|
||||
$state->{dirs_okay}{$dir} = 1;
|
||||
my $d2 = dirname($dir);
|
||||
if ($d2 ne $dir) {
|
||||
|
@ -221,17 +205,13 @@ sub mark_directory
|
|||
}
|
||||
}
|
||||
|
||||
sub mark_dir
|
||||
sub mark_dir($self, $state)
|
||||
{
|
||||
my ($self, $state) = @_;
|
||||
|
||||
$self->mark_directory($state, dirname($self->fullname));
|
||||
}
|
||||
|
||||
sub do_not_delete
|
||||
sub do_not_delete($self, $state)
|
||||
{
|
||||
my ($self, $state) = @_;
|
||||
|
||||
my $realname = $self->realname($state);
|
||||
$state->{baddelete} = 1;
|
||||
$self->{stillaround} = 1;
|
||||
|
@ -252,27 +232,23 @@ sub do_not_delete
|
|||
|
||||
|
||||
package OpenBSD::PackingElement::DirlikeObject;
|
||||
sub mark_dir
|
||||
sub mark_dir($self, $state)
|
||||
{
|
||||
my ($self, $state) = @_;
|
||||
$self->mark_directory($state, $self->fullname);
|
||||
}
|
||||
|
||||
package OpenBSD::PackingElement::RcScript;
|
||||
# XXX we should check stuff more thoroughly
|
||||
|
||||
sub delete
|
||||
sub delete($self, $state)
|
||||
{
|
||||
my ($self, $state) = @_;
|
||||
$state->{delete_rcscripts}{$self->fullname} = 1;
|
||||
$self->SUPER::delete($state);
|
||||
}
|
||||
|
||||
package OpenBSD::PackingElement::NewUser;
|
||||
sub delete
|
||||
sub delete($self, $state)
|
||||
{
|
||||
my ($self, $state) = @_;
|
||||
|
||||
if ($state->verbose >= 2) {
|
||||
$state->say("rmuser: #1", $self->name);
|
||||
}
|
||||
|
@ -280,17 +256,14 @@ sub delete
|
|||
$self->record_shared($state->{recorder}, $state->{pkgname});
|
||||
}
|
||||
|
||||
sub record_shared
|
||||
sub record_shared($self, $recorder, $pkgname)
|
||||
{
|
||||
my ($self, $recorder, $pkgname) = @_;
|
||||
$recorder->{users}{$self->name} = $pkgname;
|
||||
}
|
||||
|
||||
package OpenBSD::PackingElement::NewGroup;
|
||||
sub delete
|
||||
sub delete($self, $state)
|
||||
{
|
||||
my ($self, $state) = @_;
|
||||
|
||||
if ($state->verbose >= 2) {
|
||||
$state->say("rmgroup: #1", $self->name);
|
||||
}
|
||||
|
@ -298,24 +271,20 @@ sub delete
|
|||
$self->record_shared($state->{recorder}, $state->{pkgname});
|
||||
}
|
||||
|
||||
sub record_shared
|
||||
sub record_shared($self, $recorder, $pkgname)
|
||||
{
|
||||
my ($self, $recorder, $pkgname) = @_;
|
||||
$recorder->{groups}{$self->name} = $pkgname;
|
||||
}
|
||||
|
||||
package OpenBSD::PackingElement::DirBase;
|
||||
sub prepare_for_deletion
|
||||
sub prepare_for_deletion($self, $state, $pkgname)
|
||||
{
|
||||
my ($self, $state, $pkgname) = @_;
|
||||
$state->vstat->remove_directory(
|
||||
$self->retrieve_fullname($state, $pkgname), $self);
|
||||
}
|
||||
|
||||
sub delete
|
||||
sub delete($self, $state)
|
||||
{
|
||||
my ($self, $state) = @_;
|
||||
|
||||
if ($state->verbose >= 5) {
|
||||
$state->say("rmdir: #1", $self->fullname);
|
||||
}
|
||||
|
@ -323,66 +292,59 @@ sub delete
|
|||
$self->record_shared($state->{recorder}, $state->{pkgname});
|
||||
}
|
||||
|
||||
sub record_shared
|
||||
sub record_shared($self, $recorder, $pkgname)
|
||||
{
|
||||
my ($self, $recorder, $pkgname) = @_;
|
||||
# enough for the entry to exist, we only record interesting
|
||||
# entries more thoroughly
|
||||
$recorder->{dirs}{$self->fullname} //= [];
|
||||
}
|
||||
|
||||
package OpenBSD::PackingElement::Mandir;
|
||||
sub record_shared
|
||||
sub record_shared($self, $recorder, $pkgname)
|
||||
{
|
||||
my ($self, $recorder, $pkgname) = @_;
|
||||
$self->{pkgname} = $pkgname;
|
||||
push(@{$recorder->{dirs}{$self->fullname}} , $self);
|
||||
}
|
||||
|
||||
package OpenBSD::PackingElement::Fontdir;
|
||||
sub record_shared
|
||||
sub record_shared($self, $recorder, $pkgname)
|
||||
{
|
||||
my ($self, $recorder, $pkgname) = @_;
|
||||
$self->{pkgname} = $pkgname;
|
||||
push(@{$recorder->{dirs}{$self->fullname}} , $self);
|
||||
$recorder->{fonts_todo}{$self->fullname} = 1;
|
||||
}
|
||||
|
||||
package OpenBSD::PackingElement::Infodir;
|
||||
sub record_shared
|
||||
sub record_shared # forwarder
|
||||
{
|
||||
&OpenBSD::PackingElement::Mandir::record_shared;
|
||||
}
|
||||
|
||||
package OpenBSD::PackingElement::Unexec;
|
||||
sub delete
|
||||
sub delete($self, $state)
|
||||
{
|
||||
my ($self, $state) = @_;
|
||||
if ($self->should_run($state)) {
|
||||
$self->run($state);
|
||||
}
|
||||
}
|
||||
|
||||
sub should_run { 1 }
|
||||
sub should_run($, $) { 1 }
|
||||
|
||||
package OpenBSD::PackingElement::UnexecDelete;
|
||||
sub should_run
|
||||
sub should_run($self, $state)
|
||||
{
|
||||
my ($self, $state) = @_;
|
||||
return !$state->replacing;
|
||||
}
|
||||
|
||||
package OpenBSD::PackingElement::UnexecUpdate;
|
||||
sub should_run
|
||||
sub should_run($self, $state)
|
||||
{
|
||||
my ($self, $state) = @_;
|
||||
return $state->replacing;
|
||||
}
|
||||
|
||||
package OpenBSD::PackingElement::DefineTag::Atend;
|
||||
sub delete
|
||||
sub delete($self, $state)
|
||||
{
|
||||
my ($self, $state) = @_;
|
||||
if (!$state->replacing) {
|
||||
$state->{tags}{deleted}{$self->name} = 1;
|
||||
}
|
||||
|
@ -390,10 +352,8 @@ sub delete
|
|||
|
||||
|
||||
package OpenBSD::PackingElement::Tag;
|
||||
sub delete
|
||||
sub delete($self, $state)
|
||||
{
|
||||
my ($self, $state) = @_;
|
||||
|
||||
for my $d (@{$self->{definition_list}}) {
|
||||
$d->add_tag($self, "delete", $state);
|
||||
}
|
||||
|
@ -402,10 +362,8 @@ sub delete
|
|||
package OpenBSD::PackingElement::FileBase;
|
||||
use OpenBSD::Error;
|
||||
|
||||
sub prepare_for_deletion
|
||||
sub prepare_for_deletion($self, $state, $pkgname)
|
||||
{
|
||||
my ($self, $state, $pkgname) = @_;
|
||||
|
||||
my $fname = $self->retrieve_fullname($state, $pkgname);
|
||||
my $s;
|
||||
my $size = $self->{tied} ? 0 : $self->retrieve_size;
|
||||
|
@ -420,9 +378,8 @@ sub prepare_for_deletion
|
|||
}
|
||||
}
|
||||
|
||||
sub is_intact
|
||||
sub is_intact($self, $state, $realname)
|
||||
{
|
||||
my ($self, $state, $realname) = @_;
|
||||
return 1 if defined($self->{link}) or $self->{nochecksum};
|
||||
if (!defined $self->{d}) {
|
||||
if ($self->fullname eq $realname) {
|
||||
|
@ -447,9 +404,8 @@ sub is_intact
|
|||
return 0;
|
||||
}
|
||||
|
||||
sub delete
|
||||
sub delete($self, $state)
|
||||
{
|
||||
my ($self, $state) = @_;
|
||||
my $realname = $self->realname($state);
|
||||
return if defined $state->{current_set}{dont_delete}{$realname};
|
||||
|
||||
|
@ -502,10 +458,8 @@ sub delete
|
|||
}
|
||||
}
|
||||
|
||||
sub copy_old_stuff
|
||||
sub copy_old_stuff($self, $plist, $state)
|
||||
{
|
||||
my ($self, $plist, $state) = @_;
|
||||
|
||||
if (defined $self->{stillaround}) {
|
||||
delete $self->{stillaround};
|
||||
if ($state->replacing) {
|
||||
|
@ -518,26 +472,24 @@ sub copy_old_stuff
|
|||
package OpenBSD::PackingElement::SpecialFile;
|
||||
use OpenBSD::PackageInfo;
|
||||
|
||||
sub copy_old_stuff
|
||||
sub copy_old_stuff($, $, $)
|
||||
{
|
||||
}
|
||||
|
||||
package OpenBSD::PackingElement::Meta;
|
||||
sub copy_old_stuff
|
||||
sub copy_old_stuff($self, $plist, $state)
|
||||
{
|
||||
my ($self, $plist, $state) = @_;
|
||||
$self->add_object($plist);
|
||||
}
|
||||
|
||||
package OpenBSD::PackingElement::DigitalSignature;
|
||||
sub copy_old_stuff
|
||||
sub copy_old_stuff($, $, $)
|
||||
{
|
||||
}
|
||||
|
||||
package OpenBSD::PackingElement::FDESC;
|
||||
sub copy_old_stuff
|
||||
sub copy_old_stuff($self, $plist, $state)
|
||||
{
|
||||
my ($self, $plist, $state) = @_;
|
||||
require File::Copy;
|
||||
|
||||
File::Copy::copy($self->fullname, $plist->infodir);
|
||||
|
@ -548,9 +500,8 @@ package OpenBSD::PackingElement::Sample;
|
|||
use OpenBSD::Error;
|
||||
use File::Basename;
|
||||
|
||||
sub delete
|
||||
sub delete($self, $state)
|
||||
{
|
||||
my ($self, $state) = @_;
|
||||
my $realname = $self->realname($state);
|
||||
|
||||
my $orig = $self->{copyfrom};
|
||||
|
@ -603,9 +554,8 @@ sub delete
|
|||
package OpenBSD::PackingElement::InfoFile;
|
||||
use File::Basename;
|
||||
use OpenBSD::Error;
|
||||
sub delete
|
||||
sub delete($self, $state)
|
||||
{
|
||||
my ($self, $state) = @_;
|
||||
unless ($state->{not}) {
|
||||
my $fullname = $state->{destdir}.$self->fullname;
|
||||
$state->vsystem(OpenBSD::Paths->install_info,
|
||||
|
@ -615,9 +565,8 @@ sub delete
|
|||
}
|
||||
|
||||
package OpenBSD::PackingElement::Shell;
|
||||
sub delete
|
||||
sub delete($self, $state)
|
||||
{
|
||||
my ($self, $state) = @_;
|
||||
unless ($state->{not}) {
|
||||
my $destdir = $state->{destdir};
|
||||
my $fullname = $self->fullname;
|
||||
|
@ -645,9 +594,8 @@ sub delete
|
|||
package OpenBSD::PackingElement::Extra;
|
||||
use File::Basename;
|
||||
|
||||
sub delete
|
||||
sub delete($self, $state)
|
||||
{
|
||||
my ($self, $state) = @_;
|
||||
return if defined $state->{current_set}{known_extra}{$self->fullname};
|
||||
my $realname = $self->realname($state);
|
||||
if ($state->verbose >= 2 && $state->{extra}) {
|
||||
|
@ -666,9 +614,8 @@ sub delete
|
|||
|
||||
|
||||
package OpenBSD::PackingElement::Extradir;
|
||||
sub delete
|
||||
sub delete($self, $state)
|
||||
{
|
||||
my ($self, $state) = @_;
|
||||
return unless $state->{extra};
|
||||
return if defined $state->{current_set}{known_extra}{$self->fullname};
|
||||
my $realname = $self->realname($state);
|
||||
|
@ -682,9 +629,8 @@ sub delete
|
|||
|
||||
package OpenBSD::PackingElement::ExtraUnexec;
|
||||
|
||||
sub delete
|
||||
sub delete($self, $state)
|
||||
{
|
||||
my ($self, $state) = @_;
|
||||
if ($state->{extra}) {
|
||||
$self->run($state);
|
||||
} else {
|
||||
|
@ -693,34 +639,29 @@ sub delete
|
|||
}
|
||||
|
||||
package OpenBSD::PackingElement::Lib;
|
||||
sub delete
|
||||
sub delete($self, $state)
|
||||
{
|
||||
my ($self, $state) = @_;
|
||||
$self->SUPER::delete($state);
|
||||
$self->mark_ldconfig_directory($state);
|
||||
}
|
||||
|
||||
package OpenBSD::PackingElement::Depend;
|
||||
sub copy_old_stuff
|
||||
sub copy_old_stuff($self, $plist, $state)
|
||||
{
|
||||
my ($self, $plist, $state) = @_;
|
||||
|
||||
OpenBSD::PackingElement::Comment->add($plist,
|
||||
"\@".$self->keyword." ".$self->stringize);
|
||||
}
|
||||
|
||||
package OpenBSD::PackingElement::FDISPLAY;
|
||||
sub delete
|
||||
sub delete($self, $state)
|
||||
{
|
||||
my ($self, $state) = @_;
|
||||
$state->{current_set}{known_displays}{$self->{d}->key} = 1;
|
||||
$self->SUPER::delete($state);
|
||||
}
|
||||
|
||||
package OpenBSD::PackingElement::FUNDISPLAY;
|
||||
sub delete
|
||||
sub delete($self, $state)
|
||||
{
|
||||
my ($self, $state) = @_;
|
||||
my $d = $self->{d};
|
||||
if (!$state->{current_set}{known_displays}{$self->{d}->key}) {
|
||||
$self->prepare($state);
|
||||
|
@ -729,9 +670,8 @@ sub delete
|
|||
}
|
||||
|
||||
package OpenBSD::PackingElement::Mandir;
|
||||
sub delete
|
||||
sub delete($self, $state)
|
||||
{
|
||||
my ($self, $state) = @_;
|
||||
$state->{current_set}{known_mandirs}{$self->fullname} = 1;
|
||||
$self->SUPER::delete($state);
|
||||
}
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
# ex:ts=8 sw=4:
|
||||
# $OpenBSD: Dependencies.pm,v 1.174 2023/05/21 16:07:35 espie Exp $
|
||||
# $OpenBSD: Dependencies.pm,v 1.175 2023/06/13 09:07:17 espie Exp $
|
||||
#
|
||||
# Copyright (c) 2005-2010 Marc Espie <espie@openbsd.org>
|
||||
#
|
||||
|
@ -14,55 +14,48 @@
|
|||
# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
|
||||
# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
|
||||
|
||||
use strict;
|
||||
use warnings;
|
||||
use v5.36;
|
||||
|
||||
use OpenBSD::Dependencies::SolverBase;
|
||||
|
||||
package _cache;
|
||||
|
||||
sub new
|
||||
sub new($class, $v)
|
||||
{
|
||||
my ($class, $v) = @_;
|
||||
bless \$v, $class;
|
||||
}
|
||||
|
||||
sub pretty
|
||||
sub pretty($self)
|
||||
{
|
||||
my $self = shift;
|
||||
return ref($self)."(".$$self.")";
|
||||
}
|
||||
|
||||
package _cache::self;
|
||||
our @ISA=(qw(_cache));
|
||||
sub do
|
||||
sub do($v, $solver, $state, $dep, $package)
|
||||
{
|
||||
my ($v, $solver, $state, $dep, $package) = @_;
|
||||
push(@{$package->{before}}, $$v);
|
||||
return $$v;
|
||||
}
|
||||
|
||||
package _cache::installed;
|
||||
our @ISA=(qw(_cache));
|
||||
sub do
|
||||
sub do($v, $solver, $state, $dep, $package)
|
||||
{
|
||||
my ($v, $solver, $state, $dep, $package) = @_;
|
||||
return $$v;
|
||||
}
|
||||
|
||||
package _cache::bad;
|
||||
our @ISA=(qw(_cache));
|
||||
sub do
|
||||
sub do($v, $solver, $state, $dep, $package)
|
||||
{
|
||||
my ($v, $solver, $state, $dep, $package) = @_;
|
||||
return $$v;
|
||||
}
|
||||
|
||||
package _cache::to_install;
|
||||
our @ISA=(qw(_cache));
|
||||
sub do
|
||||
sub do($v, $solver, $state, $dep, $package)
|
||||
{
|
||||
my ($v, $solver, $state, $dep, $package) = @_;
|
||||
if ($state->tracker->{uptodate}{$$v}) {
|
||||
bless $v, "_cache::installed";
|
||||
$solver->set_global($dep, $v);
|
||||
|
@ -88,9 +81,8 @@ sub do
|
|||
|
||||
package _cache::to_update;
|
||||
our @ISA=(qw(_cache));
|
||||
sub do
|
||||
sub do($v, $solver, $state, $dep, $package)
|
||||
{
|
||||
my ($v, $solver, $state, $dep, $package) = @_;
|
||||
my $alt = $solver->find_dep_in_self($state, $dep);
|
||||
if ($alt) {
|
||||
$solver->set_cache($dep, _cache::self->new($alt));
|
||||
|
@ -125,23 +117,18 @@ our @ISA = qw(OpenBSD::Dependencies::SolverBase);
|
|||
|
||||
use OpenBSD::PackageInfo;
|
||||
|
||||
sub merge
|
||||
sub merge($solver, @extra)
|
||||
{
|
||||
my ($solver, @extra) = @_;
|
||||
|
||||
$solver->clone('cache', @extra);
|
||||
}
|
||||
|
||||
sub new
|
||||
sub new($class, $set)
|
||||
{
|
||||
my ($class, $set) = @_;
|
||||
bless { set => $set, bad => [] }, $class;
|
||||
}
|
||||
|
||||
sub check_for_loops
|
||||
sub check_for_loops($self, $state)
|
||||
{
|
||||
my ($self, $state) = @_;
|
||||
|
||||
my $initial = $self->{set};
|
||||
|
||||
my @todo = ();
|
||||
|
@ -185,10 +172,8 @@ sub check_for_loops
|
|||
}
|
||||
}
|
||||
|
||||
sub find_dep_in_repositories
|
||||
sub find_dep_in_repositories($self, $state, $dep)
|
||||
{
|
||||
my ($self, $state, $dep) = @_;
|
||||
|
||||
return unless $dep->spec->is_valid;
|
||||
|
||||
my $default = $dep->{def};
|
||||
|
@ -224,10 +209,8 @@ sub find_dep_in_repositories
|
|||
}
|
||||
}
|
||||
|
||||
sub find_dep_in_stuff_to_install
|
||||
sub find_dep_in_stuff_to_install($self, $state, $dep)
|
||||
{
|
||||
my ($self, $state, $dep) = @_;
|
||||
|
||||
my $v = $self->find_candidate($dep,
|
||||
keys %{$state->tracker->{uptodate}});
|
||||
if ($v) {
|
||||
|
@ -257,10 +240,8 @@ sub find_dep_in_stuff_to_install
|
|||
return $v;
|
||||
}
|
||||
|
||||
sub really_solve_dependency
|
||||
sub really_solve_dependency($self, $state, $dep, $package)
|
||||
{
|
||||
my ($self, $state, $dep, $package) = @_;
|
||||
|
||||
my $v;
|
||||
|
||||
if ($state->{allow_replacing}) {
|
||||
|
@ -318,10 +299,8 @@ sub really_solve_dependency
|
|||
return $v;
|
||||
}
|
||||
|
||||
sub check_depends
|
||||
sub check_depends($self)
|
||||
{
|
||||
my $self = shift;
|
||||
|
||||
for my $dep ($self->dependencies) {
|
||||
push(@{$self->{bad}}, $dep)
|
||||
unless is_installed($dep) or
|
||||
|
@ -330,10 +309,8 @@ sub check_depends
|
|||
return $self->{bad};
|
||||
}
|
||||
|
||||
sub register_dependencies
|
||||
sub register_dependencies($self, $state)
|
||||
{
|
||||
my ($self, $state) = @_;
|
||||
|
||||
require OpenBSD::RequiredBy;
|
||||
for my $pkg ($self->{set}->newer) {
|
||||
my $pkgname = $pkg->pkgname;
|
||||
|
@ -346,9 +323,8 @@ sub register_dependencies
|
|||
}
|
||||
}
|
||||
|
||||
sub repair_dependencies
|
||||
sub repair_dependencies($self, $state)
|
||||
{
|
||||
my ($self, $state) = @_;
|
||||
for my $p ($self->{set}->newer) {
|
||||
my $pkgname = $p->pkgname;
|
||||
for my $pkg (installed_packages(1)) {
|
||||
|
@ -359,9 +335,8 @@ sub repair_dependencies
|
|||
}
|
||||
}
|
||||
|
||||
sub find_old_lib
|
||||
sub find_old_lib($self, $state, $base, $pattern, $lib)
|
||||
{
|
||||
my ($self, $state, $base, $pattern, $lib) = @_;
|
||||
|
||||
require OpenBSD::Search;
|
||||
|
||||
|
@ -375,17 +350,13 @@ sub find_old_lib
|
|||
return undef;
|
||||
}
|
||||
|
||||
sub errsay_library
|
||||
sub errsay_library($solver, $state, $h)
|
||||
{
|
||||
my ($solver, $state, $h) = @_;
|
||||
|
||||
$state->errsay("Can't install #1 because of libraries", $h->pkgname);
|
||||
}
|
||||
|
||||
sub solve_old_depends
|
||||
sub solve_old_depends($self, $state)
|
||||
{
|
||||
my ($self, $state) = @_;
|
||||
|
||||
$self->{old_dependencies} = {};
|
||||
for my $package ($self->{set}->older) {
|
||||
for my $dep (@{$package->dependency_info->{depend}}) {
|
||||
|
@ -397,9 +368,8 @@ sub solve_old_depends
|
|||
}
|
||||
}
|
||||
|
||||
sub solve_handle_tags
|
||||
sub solve_handle_tags($solver, $h, $state)
|
||||
{
|
||||
my ($solver, $h, $state) = @_;
|
||||
my $plist = $h->plist;
|
||||
return 1 if !defined $plist->{tags};
|
||||
my $okay = 1;
|
||||
|
@ -415,10 +385,8 @@ sub solve_handle_tags
|
|||
return $okay;
|
||||
}
|
||||
|
||||
sub solve_tags
|
||||
sub solve_tags($solver, $state)
|
||||
{
|
||||
my ($solver, $state) = @_;
|
||||
|
||||
my $okay = 1;
|
||||
for my $h ($solver->{set}->changed_handles) {
|
||||
if (!$solver->solve_handle_tags($h, $state)) {
|
||||
|
@ -433,14 +401,13 @@ sub solve_tags
|
|||
}
|
||||
|
||||
package OpenBSD::PackingElement;
|
||||
sub repair_dependency
|
||||
sub repair_dependency($, $, $)
|
||||
{
|
||||
}
|
||||
|
||||
package OpenBSD::PackingElement::Dependency;
|
||||
sub repair_dependency
|
||||
sub repair_dependency($self, $requiring, $required)
|
||||
{
|
||||
my ($self, $requiring, $required) = @_;
|
||||
if ($self->spec->filter($required) == 1) {
|
||||
require OpenBSD::RequiredBy;
|
||||
OpenBSD::RequiredBy->new($required)->add($requiring);
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
# ex:ts=8 sw=4:
|
||||
# $OpenBSD: SolverBase.pm,v 1.15 2023/05/27 10:08:45 espie Exp $
|
||||
# $OpenBSD: SolverBase.pm,v 1.16 2023/06/13 09:07:18 espie Exp $
|
||||
#
|
||||
# Copyright (c) 2005-2018 Marc Espie <espie@openbsd.org>
|
||||
#
|
||||
|
@ -14,17 +14,18 @@
|
|||
# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
|
||||
# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
|
||||
|
||||
use strict;
|
||||
use warnings;
|
||||
use v5.36;
|
||||
|
||||
# generic dependencies lookup class: walk the dependency tree as far
|
||||
# as necessary to resolve dependencies
|
||||
package OpenBSD::lookup;
|
||||
|
||||
sub lookup
|
||||
{
|
||||
my ($self, $solver, $dependencies, $state, $obj) = @_;
|
||||
# this is a template method that relies on subclasses defining
|
||||
# find_in_already_done, find_in_extra_sources, find_in_new_source
|
||||
# and find_elsewhere accordingly
|
||||
|
||||
sub lookup($self, $solver, $dependencies, $state, $obj)
|
||||
{
|
||||
my $known = $self->{known};
|
||||
if (my $r = $self->find_in_already_done($solver, $state, $obj)) {
|
||||
$dependencies->{$r} = 1;
|
||||
|
@ -71,9 +72,8 @@ sub lookup
|
|||
# While walking the dependency tree, we may loop back to an older package,
|
||||
# because we're relying on dep lists on disk, that we haven't adjusted yet
|
||||
# since we're just checking. We need to prepare for the update here as well!
|
||||
sub may_adjust
|
||||
sub may_adjust($self, $solver, $state, $dep)
|
||||
{
|
||||
my ($self, $solver, $state, $dep) = @_;
|
||||
my $h = $solver->{set}{older}{$dep};
|
||||
if (defined $h) {
|
||||
$state->print("Detecting older #1...", $dep)
|
||||
|
@ -93,19 +93,15 @@ sub may_adjust
|
|||
return undef;
|
||||
}
|
||||
|
||||
sub new
|
||||
sub new($class, $solver)
|
||||
{
|
||||
my ($class, $solver) = @_;
|
||||
|
||||
# prepare for closure
|
||||
my @todo = $solver->dependencies;
|
||||
bless { todo => \@todo, done => {}, known => {} }, $class;
|
||||
}
|
||||
|
||||
sub dump
|
||||
sub dump($self, $state)
|
||||
{
|
||||
my ($self, $state) = @_;
|
||||
|
||||
return unless %{$self->{done}};
|
||||
$state->say("Full dependency tree is #1",
|
||||
join(' ', keys %{$self->{done}}));
|
||||
|
@ -114,19 +110,14 @@ sub dump
|
|||
package OpenBSD::lookup::library;
|
||||
our @ISA=qw(OpenBSD::lookup);
|
||||
|
||||
sub say_found
|
||||
sub say_found($self, $state, $obj, $where)
|
||||
{
|
||||
my ($self, $state, $obj, $where) = @_;
|
||||
|
||||
$state->say("found libspec #1 in #2", $obj->to_string, $where)
|
||||
if $state->verbose >= 3;
|
||||
}
|
||||
|
||||
sub find_in_already_done
|
||||
sub find_in_already_done($self, $solver, $state, $obj)
|
||||
{
|
||||
my ($self, $solver, $state, $obj) = @_;
|
||||
|
||||
|
||||
my $r = $solver->check_lib_spec($state, $solver->{localbase}, $obj,
|
||||
$self->{known});
|
||||
if ($r) {
|
||||
|
@ -137,9 +128,8 @@ sub find_in_already_done
|
|||
}
|
||||
}
|
||||
|
||||
sub find_in_extra_sources
|
||||
sub find_in_extra_sources($self, $solver, $state, $obj)
|
||||
{
|
||||
my ($self, $solver, $state, $obj) = @_;
|
||||
return undef if !$obj->is_valid || defined $obj->{dir};
|
||||
|
||||
$state->shlibs->add_libs_from_system($state->{destdir});
|
||||
|
@ -152,10 +142,8 @@ sub find_in_extra_sources
|
|||
return undef;
|
||||
}
|
||||
|
||||
sub find_in_new_source
|
||||
sub find_in_new_source($self, $solver, $state, $obj, $dep)
|
||||
{
|
||||
my ($self, $solver, $state, $obj, $dep) = @_;
|
||||
|
||||
if (defined $solver->{set}{newer}{$dep}) {
|
||||
$state->shlibs->add_libs_from_plist($solver->{set}{newer}{$dep}->plist);
|
||||
} else {
|
||||
|
@ -168,10 +156,8 @@ sub find_in_new_source
|
|||
return undef;
|
||||
}
|
||||
|
||||
sub find_elsewhere
|
||||
sub find_elsewhere($self, $solver, $state, $obj)
|
||||
{
|
||||
my ($self, $solver, $state, $obj) = @_;
|
||||
|
||||
for my $n ($solver->{set}->newer) {
|
||||
for my $dep (@{$n->dependency_info->{depend}}) {
|
||||
my $r = $solver->find_old_lib($state,
|
||||
|
@ -188,10 +174,8 @@ sub find_elsewhere
|
|||
|
||||
package OpenBSD::lookup::tag;
|
||||
our @ISA=qw(OpenBSD::lookup);
|
||||
sub new
|
||||
sub new($class, $solver, $state)
|
||||
{
|
||||
my ($class, $solver, $state) = @_;
|
||||
|
||||
# prepare for closure
|
||||
if (!defined $solver->{old_dependencies}) {
|
||||
$solver->solve_old_depends($state);
|
||||
|
@ -200,17 +184,16 @@ sub new
|
|||
bless { todo => \@todo, done => {}, known => {} }, $class;
|
||||
}
|
||||
|
||||
sub find_in_extra_sources
|
||||
sub find_in_extra_sources($, $, $, $)
|
||||
{
|
||||
}
|
||||
|
||||
sub find_elsewhere
|
||||
sub find_elsewhere($, $, $, $)
|
||||
{
|
||||
}
|
||||
|
||||
sub find_in_already_done
|
||||
sub find_in_already_done($self, $solver, $state, $obj)
|
||||
{
|
||||
my ($self, $solver, $state, $obj) = @_;
|
||||
my $r = $self->{known_tags}{$obj->name};
|
||||
if (defined $r) {
|
||||
my ($dep, $d) = @$r;
|
||||
|
@ -222,9 +205,8 @@ sub find_in_already_done
|
|||
return undef;
|
||||
}
|
||||
|
||||
sub find_in_plist
|
||||
sub find_in_plist($self, $plist, $dep)
|
||||
{
|
||||
my ($self, $plist, $dep) = @_;
|
||||
if (defined $plist->{tags_definitions}) {
|
||||
while (my ($name, $d) = each %{$plist->{tags_definitions}}) {
|
||||
$self->{known_tags}{$name} = [$dep, $d];
|
||||
|
@ -232,9 +214,8 @@ sub find_in_plist
|
|||
}
|
||||
}
|
||||
|
||||
sub find_in_new_source
|
||||
sub find_in_new_source($self, $solver, $state, $obj, $dep)
|
||||
{
|
||||
my ($self, $solver, $state, $obj, $dep) = @_;
|
||||
my $plist;
|
||||
|
||||
if (defined $solver->{set}{newer}{$dep}) {
|
||||
|
@ -254,9 +235,8 @@ sub find_in_new_source
|
|||
# both the solver and the conflict cache inherit from cloner
|
||||
# they both want to merge several hashes from extra data.
|
||||
package OpenBSD::Cloner;
|
||||
sub clone
|
||||
sub clone($self, $h, @extra)
|
||||
{
|
||||
my ($self, $h, @extra) = @_;
|
||||
for my $extra (@extra) {
|
||||
next unless defined $extra;
|
||||
while (my ($k, $e) = each %{$extra->{$h}}) {
|
||||
|
@ -274,34 +254,29 @@ our @ISA = qw(OpenBSD::Cloner);
|
|||
|
||||
my $global_cache = {};
|
||||
|
||||
sub cached
|
||||
sub cached($self, $dep)
|
||||
{
|
||||
my ($self, $dep) = @_;
|
||||
return $global_cache->{$dep->{pattern}} ||
|
||||
$self->{cache}{$dep->{pattern}};
|
||||
}
|
||||
|
||||
sub set_cache
|
||||
sub set_cache($self, $dep, $value)
|
||||
{
|
||||
my ($self, $dep, $value) = @_;
|
||||
$self->{cache}{$dep->{pattern}} = $value;
|
||||
}
|
||||
|
||||
sub set_global
|
||||
sub set_global($self, $dep, $value)
|
||||
{
|
||||
my ($self, $dep, $value) = @_;
|
||||
$global_cache->{$dep->{pattern}} = $value;
|
||||
}
|
||||
|
||||
sub global_cache
|
||||
sub global_cache($self, $pattern)
|
||||
{
|
||||
my ($self, $pattern) = @_;
|
||||
return $global_cache->{$pattern};
|
||||
}
|
||||
|
||||
sub find_candidate
|
||||
sub find_candidate($self, $dep, @list)
|
||||
{
|
||||
my ($self, $dep, @list) = @_;
|
||||
my @candidates = $dep->spec->filter(@list);
|
||||
if (@candidates >= 1) {
|
||||
return $candidates[0];
|
||||
|
@ -310,10 +285,8 @@ sub find_candidate
|
|||
}
|
||||
}
|
||||
|
||||
sub solve_dependency
|
||||
sub solve_dependency($self, $state, $dep, $package)
|
||||
{
|
||||
my ($self, $state, $dep, $package) = @_;
|
||||
|
||||
my $v;
|
||||
|
||||
if (defined $self->cached($dep)) {
|
||||
|
@ -335,10 +308,8 @@ sub solve_dependency
|
|||
$state->solve_dependency($self, $dep, $package);
|
||||
}
|
||||
|
||||
sub solve_depends
|
||||
sub solve_depends($self, $state)
|
||||
{
|
||||
my ($self, $state) = @_;
|
||||
|
||||
$self->{all_dependencies} = {};
|
||||
$self->{to_register} = {};
|
||||
$self->{deplist} = {};
|
||||
|
@ -358,9 +329,8 @@ sub solve_depends
|
|||
return sort values %{$self->{deplist}};
|
||||
}
|
||||
|
||||
sub solve_wantlibs
|
||||
sub solve_wantlibs($solver, $state)
|
||||
{
|
||||
my ($solver, $state) = @_;
|
||||
my $okay = 1;
|
||||
|
||||
my $lib_finder = OpenBSD::lookup::library->new($solver);
|
||||
|
@ -384,9 +354,8 @@ sub solve_wantlibs
|
|||
return $okay;
|
||||
}
|
||||
|
||||
sub dump
|
||||
sub dump($self, $state)
|
||||
{
|
||||
my ($self, $state) = @_;
|
||||
if ($self->dependencies) {
|
||||
$state->print("Direct dependencies for #1 resolve to #2",
|
||||
$self->{set}->print, join(' ', $self->dependencies));
|
||||
|
@ -397,9 +366,8 @@ sub dump
|
|||
}
|
||||
}
|
||||
|
||||
sub dependencies
|
||||
sub dependencies($self)
|
||||
{
|
||||
my $self = shift;
|
||||
if (wantarray) {
|
||||
return keys %{$self->{all_dependencies}};
|
||||
} else {
|
||||
|
@ -407,9 +375,8 @@ sub dependencies
|
|||
}
|
||||
}
|
||||
|
||||
sub check_lib_spec
|
||||
sub check_lib_spec($self, $state, $base, $spec, $dependencies)
|
||||
{
|
||||
my ($self, $state, $base, $spec, $dependencies) = @_;
|
||||
my $r = $state->shlibs->lookup_libspec($base, $spec);
|
||||
for my $candidate (@$r) {
|
||||
if ($dependencies->{$candidate->origin}) {
|
||||
|
@ -419,24 +386,19 @@ sub check_lib_spec
|
|||
return;
|
||||
}
|
||||
|
||||
sub find_dep_in_installed
|
||||
sub find_dep_in_installed($self, $state, $dep)
|
||||
{
|
||||
my ($self, $state, $dep) = @_;
|
||||
|
||||
return $self->find_candidate($dep, @{$self->installed_list});
|
||||
}
|
||||
|
||||
sub find_dep_in_self
|
||||
sub find_dep_in_self($self, $state, $dep)
|
||||
{
|
||||
my ($self, $state, $dep) = @_;
|
||||
|
||||
return $self->find_candidate($dep, $self->{set}->newer_names,
|
||||
$self->{set}->kept_names);
|
||||
}
|
||||
|
||||
sub find_in_self
|
||||
sub find_in_self($solver, $plist, $state, $tag)
|
||||
{
|
||||
my ($solver, $plist, $state, $tag) = @_;
|
||||
return 0 unless defined $plist->{tags_definitions}{$tag->name};
|
||||
$tag->{definition_list} = $plist->{tags_definitions}{$tag->name};
|
||||
$tag->{found_in_self} = 1;
|
||||
|
@ -447,8 +409,7 @@ sub find_in_self
|
|||
|
||||
use OpenBSD::PackageInfo;
|
||||
OpenBSD::Auto::cache(installed_list,
|
||||
sub {
|
||||
my $self = shift;
|
||||
sub($self) {
|
||||
my @l = installed_packages();
|
||||
|
||||
for my $o ($self->{set}->older_names) {
|
||||
|
@ -458,16 +419,14 @@ OpenBSD::Auto::cache(installed_list,
|
|||
}
|
||||
);
|
||||
|
||||
sub add_dep
|
||||
sub add_dep($self, $d)
|
||||
{
|
||||
my ($self, $d) = @_;
|
||||
$self->{deplist}{$d} = $d;
|
||||
}
|
||||
|
||||
|
||||
sub verify_tag
|
||||
sub verify_tag($self, $tag, $state, $plist, $is_old)
|
||||
{
|
||||
my ($self, $tag, $state, $plist, $is_old) = @_;
|
||||
my $bad_return = $is_old ? 1 : 0;
|
||||
my $type = $is_old ? "Warning" : "Error";
|
||||
my $msg = "#1 in #2: \@tag #3";
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
# ex:ts=8 sw=4:
|
||||
# $OpenBSD: Error.pm,v 1.42 2023/05/27 10:01:21 espie Exp $
|
||||
# $OpenBSD: Error.pm,v 1.43 2023/06/13 09:07:17 espie Exp $
|
||||
#
|
||||
# Copyright (c) 2004-2010 Marc Espie <espie@openbsd.org>
|
||||
#
|
||||
|
@ -14,18 +14,15 @@
|
|||
# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
|
||||
# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
|
||||
|
||||
use strict;
|
||||
use warnings;
|
||||
use v5.36;
|
||||
|
||||
# this is a set of common classes related to error handling in pkg land
|
||||
|
||||
package OpenBSD::Auto;
|
||||
sub cache :prototype(*&)
|
||||
sub cache :prototype(*&)($sym, $code)
|
||||
{
|
||||
my ($sym, $code) = @_;
|
||||
my $callpkg = caller;
|
||||
my $actual = sub {
|
||||
my $self = shift;
|
||||
my $actual = sub($self) {
|
||||
return $self->{$sym} //= &$code($self);
|
||||
};
|
||||
no strict 'refs';
|
||||
|
@ -36,40 +33,35 @@ package OpenBSD::SigHandler;
|
|||
|
||||
# instead of "local" sighandlers, let's do objects that revert
|
||||
# to their former state afterwards
|
||||
sub new
|
||||
sub new($class)
|
||||
{
|
||||
my $class = shift;
|
||||
# keep previous state
|
||||
bless {}, $class;
|
||||
}
|
||||
|
||||
|
||||
sub DESTROY
|
||||
sub DESTROY($self)
|
||||
{
|
||||
my $self = shift;
|
||||
while (my ($s, $v) = each %$self) {
|
||||
$SIG{$s} = $v;
|
||||
}
|
||||
}
|
||||
|
||||
sub set
|
||||
sub set($self, @p)
|
||||
{
|
||||
my $self = shift;
|
||||
my $v = pop;
|
||||
for my $s (@_) {
|
||||
my $v = pop @p;
|
||||
for my $s (@p) {
|
||||
$self->{$s} = $SIG{$s};
|
||||
$SIG{$s} = $v;
|
||||
}
|
||||
return $self;
|
||||
}
|
||||
|
||||
sub intercept
|
||||
sub intercept($self, @p)
|
||||
{
|
||||
my $self = shift;
|
||||
my $v = pop;
|
||||
return $self->set(@_,
|
||||
sub {
|
||||
my $sig = shift;
|
||||
my $v = pop @p;
|
||||
return $self->set(@p,
|
||||
sub($sig, @) {
|
||||
&$v($sig);
|
||||
$SIG{$sig} = $self->{$sig};
|
||||
kill -$sig, $$;
|
||||
|
@ -93,9 +85,8 @@ my $atend = {};
|
|||
# hash of code to run on fatal signals
|
||||
my $cleanup = {};
|
||||
|
||||
sub cleanup
|
||||
sub cleanup($class, $sig)
|
||||
{
|
||||
my ($class, $sig) = @_;
|
||||
# XXX note that order of cleanup is "unpredictable"
|
||||
for my $v (values %$cleanup) {
|
||||
&$v($sig);
|
||||
|
@ -106,34 +97,31 @@ END {
|
|||
# XXX localize $? so that cleanup doesn't fuck up our exit code
|
||||
local $?;
|
||||
for my $v (values %$atend) {
|
||||
&$v();
|
||||
&$v(undef);
|
||||
}
|
||||
}
|
||||
|
||||
# register each code block "by name" so that we can re-register each
|
||||
# block several times
|
||||
sub register
|
||||
sub register($class, $code)
|
||||
{
|
||||
my ($class, $code) = @_;
|
||||
$cleanup->{$code} = $code;
|
||||
}
|
||||
|
||||
sub atend
|
||||
sub atend($class, $code)
|
||||
{
|
||||
my ($class, $code) = @_;
|
||||
$cleanup->{$code} = $code;
|
||||
$atend->{$code} = $code;
|
||||
}
|
||||
|
||||
my $handler = sub {
|
||||
my $sig = shift;
|
||||
my $handler = sub($sig, @) {
|
||||
__PACKAGE__->cleanup($sig);
|
||||
# after cleanup, just propagate the signal
|
||||
$SIG{$sig} = 'DEFAULT';
|
||||
kill $sig, $$;
|
||||
};
|
||||
|
||||
sub reset
|
||||
sub reset($)
|
||||
{
|
||||
for my $sig (qw(INT QUIT HUP KILL TERM)) {
|
||||
$SIG{$sig} = $handler;
|
||||
|
@ -153,9 +141,8 @@ our ($FileName, $Line, $FullMessage);
|
|||
our @INTetc = (qw(INT QUIT HUP TERM));
|
||||
|
||||
use Carp;
|
||||
sub dienow
|
||||
sub dienow($error, $handler)
|
||||
{
|
||||
my ($error, $handler) = @_;
|
||||
if ($error) {
|
||||
if ($error =~ m/^(.*?)(?:\s+at\s+(.*)\s+line\s+(\d+)\.?)?$/o) {
|
||||
local $_ = $1;
|
||||
|
@ -170,48 +157,44 @@ sub dienow
|
|||
}
|
||||
}
|
||||
|
||||
sub try :prototype(&@)
|
||||
sub try :prototype(&@)($try, $catch)
|
||||
{
|
||||
my ($try, $catch) = @_;
|
||||
eval { &$try };
|
||||
eval { &$try() };
|
||||
dienow($@, $catch);
|
||||
}
|
||||
|
||||
sub throw
|
||||
sub throw(@p)
|
||||
{
|
||||
croak @_;
|
||||
croak @p;
|
||||
|
||||
}
|
||||
|
||||
sub rethrow
|
||||
sub rethrow($e)
|
||||
{
|
||||
my $e = shift;
|
||||
die $e if $e;
|
||||
}
|
||||
|
||||
sub catch :prototype(&)
|
||||
sub catch :prototype(&)($code)
|
||||
{
|
||||
bless $_[0], "OpenBSD::Error::catch";
|
||||
bless $code, "OpenBSD::Error::catch";
|
||||
}
|
||||
|
||||
sub rmtree
|
||||
sub rmtree($class, @p)
|
||||
{
|
||||
my $class = shift;
|
||||
require File::Path;
|
||||
require Cwd;
|
||||
|
||||
# XXX make sure we live somewhere
|
||||
Cwd::getcwd() || chdir('/');
|
||||
|
||||
File::Path::rmtree(@_);
|
||||
File::Path::rmtree(@p);
|
||||
}
|
||||
|
||||
package OpenBSD::Error::catch;
|
||||
# TODO why keep the data we don't use ?...
|
||||
sub exec
|
||||
|
||||
sub exec($self, $fullerror, $error, $filename, $line)
|
||||
{
|
||||
my ($self, $full, $e) = @_;
|
||||
&$self;
|
||||
&$self();
|
||||
}
|
||||
|
||||
1;
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
# ex:ts=8 sw=4:
|
||||
# $OpenBSD: ForwardDependencies.pm,v 1.17 2021/10/12 09:06:37 espie Exp $
|
||||
# $OpenBSD: ForwardDependencies.pm,v 1.18 2023/06/13 09:07:17 espie Exp $
|
||||
#
|
||||
# Copyright (c) 2009 Marc Espie <espie@openbsd.org>
|
||||
#
|
||||
|
@ -16,16 +16,14 @@
|
|||
|
||||
# handling of forward dependency adjustments
|
||||
|
||||
use strict;
|
||||
use warnings;
|
||||
use v5.36;
|
||||
|
||||
package OpenBSD::ForwardDependencies;
|
||||
|
||||
require OpenBSD::RequiredBy;
|
||||
|
||||
sub find
|
||||
sub find($class, $set)
|
||||
{
|
||||
my ($class, $set) = @_;
|
||||
my $forward = {};
|
||||
for my $old ($set->older) {
|
||||
for my $f (OpenBSD::RequiredBy->new($old->pkgname)->list) {
|
||||
|
@ -36,10 +34,8 @@ sub find
|
|||
bless { forward => $forward, set => $set}, $class;
|
||||
}
|
||||
|
||||
sub find_belated_update
|
||||
sub find_belated_update($set, $state, $old)
|
||||
{
|
||||
my ($set, $state, $old) = @_;
|
||||
|
||||
for my $n ($set->newer) {
|
||||
if ($n->conflict_list->conflicts_with($old->pkgname)) {
|
||||
if (defined $old->{update_found}) {
|
||||
|
@ -54,9 +50,8 @@ sub find_belated_update
|
|||
return $old->{update_found};
|
||||
}
|
||||
|
||||
sub adjust
|
||||
sub adjust($self, $state)
|
||||
{
|
||||
my ($self, $state) = @_;
|
||||
my $set = $self->{set};
|
||||
|
||||
for my $f (keys %{$self->{forward}}) {
|
||||
|
@ -93,9 +88,8 @@ sub adjust
|
|||
}
|
||||
}
|
||||
|
||||
sub dump
|
||||
sub dump($self, $result, $state)
|
||||
{
|
||||
my ($self, $result, $state) = @_;
|
||||
$state->say("#1 forward dependencies:", $self->{set}->print);
|
||||
while (my ($pkg, $l) = each %$result) {
|
||||
if (@$l == 1) {
|
||||
|
@ -109,10 +103,8 @@ sub dump
|
|||
}
|
||||
}
|
||||
|
||||
sub check
|
||||
sub check($self, $state)
|
||||
{
|
||||
my ($self, $state) = @_;
|
||||
|
||||
my @r = keys %{$self->{forward}};
|
||||
my $set = $self->{set};
|
||||
my $result = {};
|
||||
|
@ -141,15 +133,13 @@ sub check
|
|||
}
|
||||
|
||||
package OpenBSD::PackingElement;
|
||||
sub check_forward_dependency
|
||||
sub check_forward_dependency($, $, $, $, $)
|
||||
{
|
||||
}
|
||||
|
||||
package OpenBSD::PackingElement::Dependency;
|
||||
sub check_forward_dependency
|
||||
sub check_forward_dependency($self, $f, $old, $new, $r)
|
||||
{
|
||||
my ($self, $f, $old, $new, $r) = @_;
|
||||
|
||||
# nothing to validate if old dependency doesn't concern us.
|
||||
return unless $self->spec->filter(@$old);
|
||||
# nothing to do if new dependency just matches
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
#! /usr/bin/perl
|
||||
|
||||
# ex:ts=8 sw=4:
|
||||
# $OpenBSD: FwUpdate.pm,v 1.34 2022/03/10 07:18:24 hastings Exp $
|
||||
# $OpenBSD: FwUpdate.pm,v 1.35 2023/06/13 09:07:17 espie Exp $
|
||||
#
|
||||
# Copyright (c) 2014 Marc Espie <espie@openbsd.org>
|
||||
#
|
||||
|
@ -17,8 +17,7 @@
|
|||
# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
|
||||
# OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
||||
#
|
||||
use strict;
|
||||
use warnings;
|
||||
use v5.36;
|
||||
use OpenBSD::PkgAdd;
|
||||
use OpenBSD::PackageRepository;
|
||||
use OpenBSD::PackageLocator;
|
||||
|
@ -26,9 +25,8 @@ use OpenBSD::PackageLocator;
|
|||
package OpenBSD::FwUpdate::Locator;
|
||||
our @ISA = qw(OpenBSD::PackageLocator);
|
||||
|
||||
sub add_default
|
||||
sub add_default($self, $state, $p)
|
||||
{
|
||||
my ($self, $state, $p) = @_;
|
||||
my $path = $state->opt('p');
|
||||
if (!$path) {
|
||||
my $dir = OpenBSD::Paths->os_directory;
|
||||
|
@ -43,19 +41,18 @@ sub add_default
|
|||
package OpenBSD::FwUpdate::State;
|
||||
our @ISA = qw(OpenBSD::PkgAdd::State);
|
||||
|
||||
sub cache_directory
|
||||
sub cache_directory($)
|
||||
{
|
||||
return undef;
|
||||
}
|
||||
|
||||
sub locator
|
||||
sub locator($)
|
||||
{
|
||||
return "OpenBSD::FwUpdate::Locator";
|
||||
}
|
||||
|
||||
sub handle_options
|
||||
sub handle_options($state)
|
||||
{
|
||||
my $state = shift;
|
||||
$state->OpenBSD::State::handle_options('adinp:',
|
||||
'[-adinv] [-D keyword] [-p path] [driver...]');
|
||||
$state->{not} = $state->opt('n');
|
||||
|
@ -83,53 +80,46 @@ sub handle_options
|
|||
$state->{subst}->add('NO_SCP', 1);
|
||||
}
|
||||
|
||||
sub finish_init
|
||||
sub finish_init($state)
|
||||
{
|
||||
my $state = shift;
|
||||
delete $state->{signer_list}; # XXX uncache value
|
||||
$state->{subst}->add('FW_UPDATE', 1);
|
||||
}
|
||||
|
||||
sub installed_drivers
|
||||
sub installed_drivers($self)
|
||||
{
|
||||
my $self = shift;
|
||||
return keys %{$self->{installed_drivers}};
|
||||
}
|
||||
|
||||
sub is_installed
|
||||
sub is_installed($self, $driver)
|
||||
{
|
||||
my ($self, $driver) = @_;
|
||||
return $self->{installed_drivers}{$driver};
|
||||
}
|
||||
|
||||
sub machine_drivers
|
||||
sub machine_drivers($self)
|
||||
{
|
||||
my $self = shift;
|
||||
return keys %{$self->{machine_drivers}};
|
||||
}
|
||||
|
||||
sub all_drivers
|
||||
sub all_drivers($self)
|
||||
{
|
||||
my $self = shift;
|
||||
return keys %{$self->{all_drivers}};
|
||||
}
|
||||
|
||||
sub is_needed
|
||||
sub is_needed($self, $driver)
|
||||
{
|
||||
my ($self, $driver) = @_;
|
||||
return $self->{machine_drivers}{$driver};
|
||||
}
|
||||
|
||||
sub display_timestamp
|
||||
sub display_timestamp($state, $pkgname, $timestamp)
|
||||
{
|
||||
my ($state, $pkgname, $timestamp) = @_;
|
||||
return unless $state->verbose;
|
||||
$state->SUPER::display_timestamp($pkgname, $timestamp);
|
||||
}
|
||||
|
||||
sub fw_status
|
||||
sub fw_status($state, $msg, $list)
|
||||
{
|
||||
my ($state, $msg, $list) = @_;
|
||||
return if @$list == 0;
|
||||
$state->say("#1: #2", $msg, join(' ', @$list));
|
||||
}
|
||||
|
@ -141,7 +131,7 @@ package OpenBSD::FwUpdate;
|
|||
our @ISA = qw(OpenBSD::PkgAdd);
|
||||
|
||||
OpenBSD::Auto::cache(updater,
|
||||
sub {
|
||||
sub($) {
|
||||
require OpenBSD::Update;
|
||||
return OpenBSD::FwUpdate::Update->new;
|
||||
});
|
||||
|
@ -154,10 +144,8 @@ my %possible_drivers = map {($_, "$_-firmware")}
|
|||
my %match = map {($_, qr{^\Q$_\E\d+\s+at\s})} (keys %possible_drivers);
|
||||
$match{'intel'} = qr{^cpu\d+: Intel};
|
||||
|
||||
sub parse_dmesg
|
||||
sub parse_dmesg($self, $f, $search, $found)
|
||||
{
|
||||
my ($self, $f, $search, $found) = @_;
|
||||
|
||||
while (<$f>) {
|
||||
chomp;
|
||||
for my $driver (keys %$search) {
|
||||
|
@ -168,9 +156,8 @@ sub parse_dmesg
|
|||
}
|
||||
}
|
||||
|
||||
sub find_machine_drivers
|
||||
sub find_machine_drivers($self, $state)
|
||||
{
|
||||
my ($self, $state) = @_;
|
||||
$state->{machine_drivers} = {};
|
||||
$state->{all_drivers} = \%possible_drivers;
|
||||
my %search = %possible_drivers;
|
||||
|
@ -188,15 +175,13 @@ sub find_machine_drivers
|
|||
}
|
||||
}
|
||||
|
||||
sub driver2firmware
|
||||
sub driver2firmware($k)
|
||||
{
|
||||
my $k = shift;
|
||||
return $possible_drivers{$k};
|
||||
}
|
||||
|
||||
sub find_installed_drivers
|
||||
sub find_installed_drivers($self, $state)
|
||||
{
|
||||
my ($self, $state) = @_;
|
||||
my $inst = $state->repo->installed;
|
||||
for my $driver (keys %possible_drivers) {
|
||||
my $search = OpenBSD::Search::Stem->new(driver2firmware($driver));
|
||||
|
@ -209,15 +194,13 @@ sub find_installed_drivers
|
|||
}
|
||||
|
||||
|
||||
sub new_state
|
||||
sub new_state($self, $cmd)
|
||||
{
|
||||
my ($self, $cmd) = @_;
|
||||
return OpenBSD::FwUpdate::State->new($cmd);
|
||||
}
|
||||
|
||||
sub find_handle
|
||||
sub find_handle($self, $state, $driver)
|
||||
{
|
||||
my ($self, $state, $driver) = @_;
|
||||
my $pkgname = driver2firmware($driver);
|
||||
my $set;
|
||||
my $h = $state->is_installed($driver);
|
||||
|
@ -229,9 +212,8 @@ sub find_handle
|
|||
return $set;
|
||||
}
|
||||
|
||||
sub mark_set_for_deletion
|
||||
sub mark_set_for_deletion($self, $set, $state)
|
||||
{
|
||||
my ($self, $set, $state) = @_;
|
||||
# XXX to be simplified. Basically, we pre-do the work of the updater...
|
||||
for my $h ($set->older) {
|
||||
$h->{update_found} = 1;
|
||||
|
@ -240,29 +222,25 @@ sub mark_set_for_deletion
|
|||
}
|
||||
|
||||
# no quirks for firmware, bypass entirely
|
||||
sub do_quirks
|
||||
sub do_quirks($self, $state)
|
||||
{
|
||||
my ($self, $state) = @_;
|
||||
$state->finish_init;
|
||||
}
|
||||
|
||||
sub to_remove
|
||||
sub to_remove($self, $state, $driver)
|
||||
{
|
||||
my ($self, $state, $driver) = @_;
|
||||
$self->mark_set_for_deletion($self->to_add_or_update($state, $driver));
|
||||
}
|
||||
|
||||
sub to_add_or_update
|
||||
sub to_add_or_update($self, $state, $driver)
|
||||
{
|
||||
my ($self, $state, $driver) = @_;
|
||||
my $set = $self->find_handle($state, $driver);
|
||||
push(@{$state->{setlist}}, $set);
|
||||
return $set;
|
||||
}
|
||||
|
||||
sub show_info
|
||||
sub show_info($self, $state)
|
||||
{
|
||||
my ($self, $state) = @_;
|
||||
my (@installed, @unneeded, @needed);
|
||||
for my $d ($state->installed_drivers) {
|
||||
my $h = $state->is_installed($d)->pkgname;
|
||||
|
@ -282,15 +260,13 @@ sub show_info
|
|||
$state->fw_status("Missing", \@needed);
|
||||
}
|
||||
|
||||
sub silence_children
|
||||
sub silence_children($, $)
|
||||
{
|
||||
0
|
||||
}
|
||||
|
||||
sub process_parameters
|
||||
sub process_parameters($self, $state)
|
||||
{
|
||||
my ($self, $state) = @_;
|
||||
|
||||
$self->find_machine_drivers($state);
|
||||
$self->find_installed_drivers($state);
|
||||
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
# ex:ts=8 sw=4:
|
||||
# $OpenBSD: Getopt.pm,v 1.15 2023/05/21 13:44:21 espie Exp $
|
||||
# $OpenBSD: Getopt.pm,v 1.16 2023/06/13 09:07:17 espie Exp $
|
||||
#
|
||||
# Copyright (c) 2006 Marc Espie <espie@openbsd.org>
|
||||
#
|
||||
|
@ -18,8 +18,7 @@
|
|||
# This is inspired by Getopt::Std, except for the ability to invoke subs
|
||||
# on options.
|
||||
|
||||
use strict;
|
||||
use warnings;
|
||||
use v5.36;
|
||||
|
||||
package OpenBSD::Getopt;
|
||||
require Exporter;
|
||||
|
@ -27,10 +26,8 @@ require Exporter;
|
|||
our @ISA = qw(Exporter);
|
||||
our @EXPORT = qw(getopts);
|
||||
|
||||
sub handle_option
|
||||
sub handle_option($opt, $hash, @params)
|
||||
{
|
||||
my ($opt, $hash, @params) = @_;
|
||||
|
||||
if (defined $hash->{$opt} and ref($hash->{$opt}) eq 'CODE') {
|
||||
&{$hash->{$opt}}(@params);
|
||||
} else {
|
||||
|
@ -48,10 +45,8 @@ sub handle_option
|
|||
}
|
||||
}
|
||||
|
||||
sub getopts
|
||||
sub getopts($args, $hash)
|
||||
{
|
||||
my ($args, $hash) = @_;
|
||||
|
||||
$hash = {} unless defined $hash;
|
||||
local @EXPORT;
|
||||
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
# ex:ts=8 sw=4:
|
||||
# $OpenBSD: Handle.pm,v 1.43 2022/05/08 13:21:04 espie Exp $
|
||||
# $OpenBSD: Handle.pm,v 1.44 2023/06/13 09:07:17 espie Exp $
|
||||
#
|
||||
# Copyright (c) 2007-2009 Marc Espie <espie@openbsd.org>
|
||||
#
|
||||
|
@ -18,8 +18,7 @@
|
|||
# fairly non-descriptive name. Used to store various package information
|
||||
# during installs and updates.
|
||||
|
||||
use strict;
|
||||
use warnings;
|
||||
use v5.36;
|
||||
|
||||
package OpenBSD::Handle;
|
||||
|
||||
|
@ -34,11 +33,10 @@ use constant {
|
|||
CANT_DELETE => 5,
|
||||
};
|
||||
|
||||
sub is_real { return 1; }
|
||||
sub is_real($) { return 1; }
|
||||
|
||||
sub cleanup
|
||||
sub cleanup($self, $error = undef, $errorinfo = undef)
|
||||
{
|
||||
my ($self, $error, $errorinfo) = @_;
|
||||
if (defined $error) {
|
||||
$self->{error} //= $error;
|
||||
$self->{errorinfo} //= $errorinfo;
|
||||
|
@ -56,21 +54,18 @@ sub cleanup
|
|||
delete $self->{conflict_list};
|
||||
}
|
||||
|
||||
sub new
|
||||
sub new($class)
|
||||
{
|
||||
my $class = shift;
|
||||
return bless {}, $class;
|
||||
}
|
||||
|
||||
sub system
|
||||
sub system($class)
|
||||
{
|
||||
my $class = shift;
|
||||
return OpenBSD::Handle::BaseSystem->new;
|
||||
}
|
||||
|
||||
sub pkgname
|
||||
sub pkgname($self)
|
||||
{
|
||||
my $self = shift;
|
||||
if (!defined $self->{pkgname}) {
|
||||
if (defined $self->{plist}) {
|
||||
$self->{pkgname} = $self->{plist}->pkgname;
|
||||
|
@ -87,19 +82,18 @@ sub pkgname
|
|||
return $self->{pkgname};
|
||||
}
|
||||
|
||||
sub location
|
||||
sub location($self)
|
||||
{
|
||||
return shift->{location};
|
||||
return $self->{location};
|
||||
}
|
||||
|
||||
sub plist
|
||||
sub plist($self)
|
||||
{
|
||||
return shift->{plist};
|
||||
return $self->{plist};
|
||||
}
|
||||
|
||||
sub dependency_info
|
||||
sub dependency_info($self)
|
||||
{
|
||||
my $self = shift;
|
||||
if (defined $self->{plist}) {
|
||||
return $self->{plist};
|
||||
} elsif (defined $self->{location} &&
|
||||
|
@ -111,20 +105,18 @@ sub dependency_info
|
|||
}
|
||||
|
||||
OpenBSD::Auto::cache(conflict_list,
|
||||
sub {
|
||||
sub($self) {
|
||||
require OpenBSD::PkgCfl;
|
||||
return OpenBSD::PkgCfl->make_conflict_list(shift->dependency_info);
|
||||
return OpenBSD::PkgCfl->make_conflict_list($self->dependency_info);
|
||||
});
|
||||
|
||||
sub set_error
|
||||
sub set_error($self, $error)
|
||||
{
|
||||
my ($self, $error) = @_;
|
||||
$self->{error} = $error;
|
||||
}
|
||||
|
||||
sub has_error
|
||||
sub has_error($self, $error = undef)
|
||||
{
|
||||
my ($self, $error) = @_;
|
||||
if (!defined $self->{error}) {
|
||||
return undef;
|
||||
}
|
||||
|
@ -134,15 +126,13 @@ sub has_error
|
|||
return $self->{error};
|
||||
}
|
||||
|
||||
sub has_reported_error
|
||||
sub has_reported_error($self)
|
||||
{
|
||||
my $self = shift;
|
||||
return $self->{error_reported};
|
||||
}
|
||||
|
||||
sub error_message
|
||||
sub error_message($self)
|
||||
{
|
||||
my $self = shift;
|
||||
my $error = $self->{error};
|
||||
if ($error == BAD_PACKAGE) {
|
||||
return "bad package";
|
||||
|
@ -161,9 +151,8 @@ sub error_message
|
|||
}
|
||||
}
|
||||
|
||||
sub complete_old
|
||||
sub complete_old($self)
|
||||
{
|
||||
my $self = shift;
|
||||
my $location = $self->{location};
|
||||
|
||||
if (!defined $location) {
|
||||
|
@ -180,9 +169,8 @@ sub complete_old
|
|||
}
|
||||
}
|
||||
|
||||
sub complete_dependency_info
|
||||
sub complete_dependency_info($self)
|
||||
{
|
||||
my $self = shift;
|
||||
my $location = $self->{location};
|
||||
|
||||
if (!defined $location) {
|
||||
|
@ -195,10 +183,8 @@ sub complete_dependency_info
|
|||
}
|
||||
}
|
||||
|
||||
sub create_old
|
||||
sub create_old($class, $pkgname, $state)
|
||||
{
|
||||
|
||||
my ($class, $pkgname, $state) = @_;
|
||||
my $self= $class->new;
|
||||
$self->{name} = $pkgname;
|
||||
|
||||
|
@ -211,28 +197,24 @@ sub create_old
|
|||
return $self;
|
||||
}
|
||||
|
||||
sub create_new
|
||||
sub create_new($class, $pkg)
|
||||
{
|
||||
my ($class, $pkg) = @_;
|
||||
my $handle = $class->new;
|
||||
$handle->{name} = $pkg;
|
||||
$handle->{tweaked} = 0;
|
||||
return $handle;
|
||||
}
|
||||
|
||||
sub from_location
|
||||
sub from_location($class, $location)
|
||||
{
|
||||
my ($class, $location) = @_;
|
||||
my $handle = $class->new;
|
||||
$handle->{location} = $location;
|
||||
$handle->{tweaked} = 0;
|
||||
return $handle;
|
||||
}
|
||||
|
||||
sub get_plist
|
||||
sub get_plist($handle, $state)
|
||||
{
|
||||
my ($handle, $state) = @_;
|
||||
|
||||
my $location = $handle->{location};
|
||||
my $pkg = $handle->pkgname;
|
||||
|
||||
|
@ -273,10 +255,8 @@ sub get_plist
|
|||
$handle->{plist} = $plist;
|
||||
}
|
||||
|
||||
sub get_location
|
||||
sub get_location($handle, $state)
|
||||
{
|
||||
my ($handle, $state) = @_;
|
||||
|
||||
my $name = $handle->{name};
|
||||
|
||||
my $location = $state->repo->find($name);
|
||||
|
@ -300,10 +280,8 @@ sub get_location
|
|||
$handle->{pkgname} = $location->name;
|
||||
}
|
||||
|
||||
sub complete
|
||||
sub complete($handle, $state)
|
||||
{
|
||||
my ($handle, $state) = @_;
|
||||
|
||||
return if $handle->has_error;
|
||||
|
||||
if (!defined $handle->{location}) {
|
||||
|
@ -317,8 +295,8 @@ sub complete
|
|||
|
||||
package OpenBSD::Handle::BaseSystem;
|
||||
our @ISA = qw(OpenBSD::Handle);
|
||||
sub pkgname { return "BaseSystem"; }
|
||||
sub pkgname($) { return "BaseSystem"; }
|
||||
|
||||
sub is_real { return 0; }
|
||||
sub is_real($) { return 0; }
|
||||
|
||||
1;
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
# ex:ts=8 sw=4:
|
||||
# $OpenBSD: IdCache.pm,v 1.11 2023/05/16 14:31:54 espie Exp $
|
||||
# $OpenBSD: IdCache.pm,v 1.12 2023/06/13 09:07:17 espie Exp $
|
||||
#
|
||||
# Copyright (c) 2002-2005 Marc Espie <espie@openbsd.org>
|
||||
#
|
||||
|
@ -14,19 +14,16 @@
|
|||
# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
|
||||
# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
|
||||
|
||||
use strict;
|
||||
use warnings;
|
||||
use v5.36;
|
||||
|
||||
package OpenBSD::SimpleIdCache;
|
||||
sub new
|
||||
sub new($class)
|
||||
{
|
||||
my $class = shift;
|
||||
bless {}, $class;
|
||||
}
|
||||
|
||||
sub lookup
|
||||
sub lookup($self, $name, $default = undef)
|
||||
{
|
||||
my ($self, $name, $default) = @_;
|
||||
my $r;
|
||||
|
||||
if (defined $self->{$name}) {
|
||||
|
@ -45,10 +42,8 @@ sub lookup
|
|||
package OpenBSD::IdCache;
|
||||
our @ISA=qw(OpenBSD::SimpleIdCache);
|
||||
|
||||
sub lookup
|
||||
sub lookup($self, $name, $default = undef)
|
||||
{
|
||||
my ($self, $name, $default) = @_;
|
||||
|
||||
if ($name =~ m/^\d+$/o) {
|
||||
return $name;
|
||||
} else {
|
||||
|
@ -59,35 +54,35 @@ sub lookup
|
|||
package OpenBSD::UidCache;
|
||||
our @ISA=qw(OpenBSD::IdCache);
|
||||
|
||||
sub _convert
|
||||
sub _convert($, $key)
|
||||
{
|
||||
my @entry = getpwnam($_[1]);
|
||||
my @entry = getpwnam($key);
|
||||
return @entry == 0 ? undef : $entry[2];
|
||||
}
|
||||
|
||||
package OpenBSD::GidCache;
|
||||
our @ISA=qw(OpenBSD::IdCache);
|
||||
|
||||
sub _convert
|
||||
sub _convert($, $key)
|
||||
{
|
||||
my @entry = getgrnam($_[1]);
|
||||
my @entry = getgrnam($key);
|
||||
return @entry == 0 ? undef : $entry[2];
|
||||
}
|
||||
|
||||
package OpenBSD::UnameCache;
|
||||
our @ISA=qw(OpenBSD::SimpleIdCache);
|
||||
|
||||
sub _convert
|
||||
sub _convert($, $key)
|
||||
{
|
||||
return getpwuid($_[1]);
|
||||
return getpwuid($key);
|
||||
}
|
||||
|
||||
package OpenBSD::GnameCache;
|
||||
our @ISA=qw(OpenBSD::SimpleIdCache);
|
||||
|
||||
sub _convert
|
||||
sub _convert($, $key)
|
||||
{
|
||||
return getgrgid($_[1]);
|
||||
return getgrgid($key);
|
||||
}
|
||||
|
||||
1;
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
# ex:ts=8 sw=4:
|
||||
# $OpenBSD: InstalledInfo.pm,v 1.1 2020/02/17 13:06:45 espie Exp $
|
||||
# $OpenBSD: InstalledInfo.pm,v 1.2 2023/06/13 09:07:17 espie Exp $
|
||||
#
|
||||
# Copyright (c) 2003-2014 Marc Espie <espie@openbsd.org>
|
||||
#
|
||||
|
@ -15,8 +15,7 @@
|
|||
# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
|
||||
# OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
||||
|
||||
use strict;
|
||||
use warnings;
|
||||
use v5.36;
|
||||
|
||||
package OpenBSD::InstalledInfo;
|
||||
require Exporter;
|
||||
|
@ -36,34 +35,29 @@ use constant {
|
|||
UNDISPLAY => '+UNDISPLAY'
|
||||
};
|
||||
|
||||
sub new
|
||||
sub new($class, $state, $dir = $ENV{"PKG_DBDIR"} || OpenBSD::Paths->pkgdb)
|
||||
{
|
||||
my ($class, $state, $dir) = @_;
|
||||
$dir //= $ENV{"PKG_DBDIR"} || OpenBSD::Paths->pkgdb;
|
||||
return bless {state => $state, pkgdb => $dir}, $class;
|
||||
}
|
||||
|
||||
sub list
|
||||
sub list($self)
|
||||
{
|
||||
my $self = shift;
|
||||
if (!defined $self->{list}) {
|
||||
$self->_init;
|
||||
}
|
||||
return $self->{list};
|
||||
}
|
||||
|
||||
sub stems
|
||||
sub stems($self)
|
||||
{
|
||||
my $self = shift;
|
||||
if (!defined $self->{stemlist}) {
|
||||
$self->_init;
|
||||
}
|
||||
return $self->{stemlist};
|
||||
}
|
||||
|
||||
sub _init
|
||||
sub _init($self)
|
||||
{
|
||||
my $self = shift;
|
||||
opendir(my $dir, $self->{pkgdb}) or
|
||||
$self->{state}->fatal("Bad pkg_db #1: #2", $self->{pgkdb}, $!);
|
||||
|
||||
|
@ -86,20 +80,18 @@ for my $i (@info) {
|
|||
$info{$i} = $j;
|
||||
}
|
||||
|
||||
sub add
|
||||
sub add($self, @p)
|
||||
{
|
||||
my $self = shift;
|
||||
for my $p (@_) {
|
||||
for my $p (@p) {
|
||||
$self->{list}{$p} = 1;
|
||||
$self->{stemlist}->add($p);
|
||||
}
|
||||
return $self;
|
||||
}
|
||||
|
||||
sub delete
|
||||
sub delete($self, @p)
|
||||
{
|
||||
my $self = shift;
|
||||
for my $p (@_) {
|
||||
for my $p (@p) {
|
||||
delete $self->{list}{$p};
|
||||
$self->{stemlist}->delete($p);
|
||||
|
||||
|
@ -107,20 +99,17 @@ sub delete
|
|||
return $self;
|
||||
}
|
||||
|
||||
sub packages
|
||||
sub packages($self, $all = 0)
|
||||
{
|
||||
my $self = shift;
|
||||
if ($_[0]) {
|
||||
if ($all) {
|
||||
return grep { !/^\./o } keys %{$self->list};
|
||||
} else {
|
||||
return keys %{$self->list};
|
||||
}
|
||||
}
|
||||
|
||||
sub fullname
|
||||
sub fullname($self, $name)
|
||||
{
|
||||
my ($self, $name) = @_;
|
||||
|
||||
if ($name =~ m|^\Q$self->{pkgdb}\E/?|) {
|
||||
return "$name/";
|
||||
} else {
|
||||
|
@ -128,15 +117,13 @@ sub fullname
|
|||
}
|
||||
}
|
||||
|
||||
sub contents
|
||||
sub contents($self, $name)
|
||||
{
|
||||
my ($self, $name) = @_;
|
||||
return $self->info($name).CONTENTS;
|
||||
}
|
||||
|
||||
sub borked_package
|
||||
sub borked_package($self, $pkgname)
|
||||
{
|
||||
my ($self, $pkgname) = shift;
|
||||
$pkgname = "partial-$pkgname" unless $pkgname =~ m/^partial\-/;
|
||||
unless (-e "$self->{pkgdb}/$pkgname") {
|
||||
return $pkgname;
|
||||
|
@ -149,9 +136,8 @@ sub borked_package
|
|||
return "$pkgname.$i";
|
||||
}
|
||||
|
||||
sub libs_package
|
||||
sub libs_package($self, $pkgname)
|
||||
{
|
||||
my ($self, $pkgname) = @_;
|
||||
$pkgname =~ s/^\.libs\d*\-//;
|
||||
unless (-e "$self->{pkgdb}/.libs-$pkgname") {
|
||||
return ".libs-$pkgname";
|
||||
|
@ -164,9 +150,8 @@ sub libs_package
|
|||
return ".libs$i-$pkgname";
|
||||
}
|
||||
|
||||
sub installed_name
|
||||
sub installed_name($self, $path)
|
||||
{
|
||||
my ($self, $path) = @_;
|
||||
require File::Spec;
|
||||
my $name = File::Spec->canonpath($path);
|
||||
$name =~ s|/$||o;
|
||||
|
@ -175,28 +160,24 @@ sub installed_name
|
|||
return $name;
|
||||
}
|
||||
|
||||
sub is_installed
|
||||
sub is_installed($self, $path)
|
||||
{
|
||||
my ($self, $path) = @_;
|
||||
my $name = $self->installed_name($path);
|
||||
return defined $self->list->{$self->installed_name($path)};
|
||||
}
|
||||
|
||||
sub info_names
|
||||
sub info_names($class)
|
||||
{
|
||||
my $class = shift;
|
||||
return @info;
|
||||
}
|
||||
|
||||
sub is_info_name
|
||||
sub is_info_name($class, $name)
|
||||
{
|
||||
my ($class, $name) = @_;
|
||||
return $info{$name};
|
||||
}
|
||||
|
||||
sub lock
|
||||
sub lock($self, $shared = 0, $quiet = 0)
|
||||
{
|
||||
my ($self, $shared, $quiet) = @_;
|
||||
return if defined $self->{dlock};
|
||||
my $mode = $shared ? LOCK_SH : LOCK_EX;
|
||||
open($self->{dlock}, '<', $self->{pkg_db}) or return;
|
||||
|
@ -209,7 +190,7 @@ sub lock
|
|||
return $self;
|
||||
}
|
||||
|
||||
sub unlock
|
||||
sub unlock($self)
|
||||
{
|
||||
my $self = shift;
|
||||
if (defined $self->{dlock}) {
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
# ex:ts=8 sw=4:
|
||||
# $OpenBSD: Interactive.pm,v 1.22 2018/02/26 13:53:31 espie Exp $
|
||||
# $OpenBSD: Interactive.pm,v 1.23 2023/06/13 09:07:17 espie Exp $
|
||||
#
|
||||
# Copyright (c) 2005-2007 Marc Espie <espie@openbsd.org>
|
||||
#
|
||||
|
@ -14,14 +14,12 @@
|
|||
# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
|
||||
# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
|
||||
|
||||
use strict;
|
||||
use warnings;
|
||||
use v5.36;
|
||||
|
||||
package OpenBSD::Interactive;
|
||||
|
||||
sub new
|
||||
sub new($class, $state, $level)
|
||||
{
|
||||
my ($class, $state, $level) = @_;
|
||||
bless {
|
||||
state => $state,
|
||||
always => 0,
|
||||
|
@ -29,9 +27,8 @@ sub new
|
|||
}, $class;
|
||||
}
|
||||
|
||||
sub ask_list
|
||||
sub ask_list($self, $prompt, @values)
|
||||
{
|
||||
my ($self, $prompt, @values) = @_;
|
||||
if ($self->{always}) {
|
||||
return $values[0];
|
||||
}
|
||||
|
@ -83,9 +80,8 @@ LOOP:
|
|||
}
|
||||
}
|
||||
|
||||
sub confirm
|
||||
sub confirm($self, $prompt, $yesno = 0)
|
||||
{
|
||||
my ($self, $prompt, $yesno) = @_;
|
||||
if ($self->{always}) {
|
||||
return 1;
|
||||
}
|
||||
|
@ -118,9 +114,9 @@ LOOP2:
|
|||
goto LOOP2;
|
||||
}
|
||||
|
||||
sub is_interactive
|
||||
sub is_interactive($self)
|
||||
{
|
||||
return shift->{level};
|
||||
return $self->{level};
|
||||
}
|
||||
|
||||
1;
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
# ex:ts=8 sw=4:
|
||||
# $OpenBSD: LibSpec.pm,v 1.19 2023/05/27 10:01:38 espie Exp $
|
||||
# $OpenBSD: LibSpec.pm,v 1.20 2023/06/13 09:07:17 espie Exp $
|
||||
#
|
||||
# Copyright (c) 2010 Marc Espie <espie@openbsd.org>
|
||||
#
|
||||
|
@ -15,14 +15,12 @@
|
|||
# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
|
||||
# OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
||||
#
|
||||
use strict;
|
||||
use warnings;
|
||||
use v5.36;
|
||||
|
||||
package OpenBSD::LibObject;
|
||||
|
||||
sub key
|
||||
sub key($self)
|
||||
{
|
||||
my $self = shift;
|
||||
if (defined $self->{dir}) {
|
||||
return "$self->{dir}/$self->{stem}";
|
||||
} else {
|
||||
|
@ -30,43 +28,37 @@ sub key
|
|||
}
|
||||
}
|
||||
|
||||
sub major
|
||||
sub major($self)
|
||||
{
|
||||
my $self = shift;
|
||||
return $self->{major};
|
||||
}
|
||||
|
||||
sub minor
|
||||
sub minor($self)
|
||||
{
|
||||
my $self = shift;
|
||||
return $self->{minor};
|
||||
}
|
||||
|
||||
sub version
|
||||
sub version($self)
|
||||
{
|
||||
my $self = shift;
|
||||
return ".".$self->major.".".$self->minor;
|
||||
}
|
||||
|
||||
sub is_static { 0 }
|
||||
sub is_static($) { 0 }
|
||||
|
||||
sub is_valid { 1 }
|
||||
sub is_valid($) { 1 }
|
||||
|
||||
sub stem
|
||||
sub stem($self)
|
||||
{
|
||||
my $self = shift;
|
||||
return $self->{stem};
|
||||
}
|
||||
|
||||
sub badclass
|
||||
sub badclass($self)
|
||||
{
|
||||
"OpenBSD::BadLib";
|
||||
}
|
||||
|
||||
sub lookup
|
||||
sub lookup($spec, $repo, $base)
|
||||
{
|
||||
my ($spec, $repo, $base) = @_;
|
||||
|
||||
my $approx = $spec->lookup_stem($repo);
|
||||
if (!defined $approx) {
|
||||
return undef;
|
||||
|
@ -80,9 +72,8 @@ sub lookup
|
|||
return $r;
|
||||
}
|
||||
|
||||
sub compare
|
||||
sub compare($a, $b)
|
||||
{
|
||||
my ($a, $b) = @_;
|
||||
if ($a->key ne $b->key) {
|
||||
return $a->key cmp $b->key;
|
||||
}
|
||||
|
@ -95,51 +86,47 @@ sub compare
|
|||
package OpenBSD::BadLib;
|
||||
our @ISA=qw(OpenBSD::LibObject);
|
||||
|
||||
sub to_string
|
||||
sub to_string($self)
|
||||
{
|
||||
my $self = shift;
|
||||
return $$self;
|
||||
}
|
||||
|
||||
sub new
|
||||
sub new($class, $string)
|
||||
{
|
||||
my ($class, $string) = @_;
|
||||
bless \$string, $class;
|
||||
}
|
||||
|
||||
sub is_valid
|
||||
sub is_valid($)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
sub lookup_stem
|
||||
sub lookup_stem($, $)
|
||||
{
|
||||
return undef;
|
||||
}
|
||||
|
||||
# $spec->match($library, $base)
|
||||
sub match
|
||||
sub match($, $, $)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
package OpenBSD::LibRepo;
|
||||
sub new
|
||||
|
||||
sub new($class)
|
||||
{
|
||||
my $class = shift;
|
||||
bless {}, $class;
|
||||
}
|
||||
|
||||
sub register
|
||||
sub register($repo, $lib, $origin)
|
||||
{
|
||||
my ($repo, $lib, $origin) = @_;
|
||||
$lib->set_origin($origin);
|
||||
push @{$repo->{$lib->stem}}, $lib;
|
||||
}
|
||||
|
||||
sub find_best
|
||||
sub find_best($repo, $stem)
|
||||
{
|
||||
my ($repo, $stem) = @_;
|
||||
my $best;
|
||||
|
||||
if (exists $repo->{$stem}) {
|
||||
|
@ -155,9 +142,8 @@ sub find_best
|
|||
package OpenBSD::Library;
|
||||
our @ISA = qw(OpenBSD::LibObject);
|
||||
|
||||
sub from_string
|
||||
sub from_string($class, $filename)
|
||||
{
|
||||
my ($class, $filename) = @_;
|
||||
if (my ($dir, $stem, $major, $minor) = $filename =~ m/^(.*)\/lib([^\/]+)\.so\.(\d+)\.(\d+)$/o) {
|
||||
bless { dir => $dir, stem => $stem, major => $major,
|
||||
minor => $minor }, $class;
|
||||
|
@ -166,34 +152,29 @@ sub from_string
|
|||
}
|
||||
}
|
||||
|
||||
sub to_string
|
||||
sub to_string($self)
|
||||
{
|
||||
my $self = shift;
|
||||
return "$self->{dir}/lib$self->{stem}.so.$self->{major}.$self->{minor}";
|
||||
}
|
||||
|
||||
sub set_origin
|
||||
sub set_origin($self, $origin)
|
||||
{
|
||||
my ($self, $origin) = @_;
|
||||
$self->{origin} = $origin;
|
||||
return $self;
|
||||
}
|
||||
|
||||
sub origin
|
||||
sub origin($self)
|
||||
{
|
||||
my $self = shift;
|
||||
return $self->{origin};
|
||||
}
|
||||
|
||||
sub no_match_dispatch
|
||||
sub no_match_dispatch($library, $spec, $base)
|
||||
{
|
||||
my ($library, $spec, $base) = @_;
|
||||
return $spec->no_match_shared($library, $base);
|
||||
}
|
||||
|
||||
sub is_better
|
||||
sub is_better($self, $other)
|
||||
{
|
||||
my ($self, $other) = @_;
|
||||
if ($other->is_static) {
|
||||
return 1;
|
||||
}
|
||||
|
@ -209,9 +190,8 @@ sub is_better
|
|||
package OpenBSD::LibSpec;
|
||||
our @ISA = qw(OpenBSD::LibObject);
|
||||
|
||||
sub new
|
||||
sub new($class, $dir, $stem, $major, $minor)
|
||||
{
|
||||
my ($class, $dir, $stem, $major, $minor) = @_;
|
||||
bless {
|
||||
dir => $dir, stem => $stem,
|
||||
major => $major, minor => $minor
|
||||
|
@ -220,16 +200,13 @@ sub new
|
|||
|
||||
my $cached = {};
|
||||
|
||||
sub from_string
|
||||
sub from_string($class, $s)
|
||||
{
|
||||
my ($class, $s) = @_;
|
||||
return $cached->{$s} //= $class->new_from_string($s);
|
||||
}
|
||||
|
||||
sub new_with_stem
|
||||
sub new_with_stem($class, $stem, $major, $minor)
|
||||
{
|
||||
my ($class, $stem, $major, $minor) = @_;
|
||||
|
||||
if ($stem =~ m/^(.*)\/([^\/]+)$/o) {
|
||||
return $class->new($1, $2, $major, $minor);
|
||||
} else {
|
||||
|
@ -237,9 +214,8 @@ sub new_with_stem
|
|||
}
|
||||
}
|
||||
|
||||
sub new_from_string
|
||||
sub new_from_string($class, $string)
|
||||
{
|
||||
my ($class, $string) = @_;
|
||||
if (my ($stem, $major, $minor) = $string =~ m/^(.*)\.(\d+)\.(\d+)$/o) {
|
||||
return $class->new_with_stem($stem, $major, $minor);
|
||||
} else {
|
||||
|
@ -247,17 +223,14 @@ sub new_from_string
|
|||
}
|
||||
}
|
||||
|
||||
sub to_string
|
||||
sub to_string($self)
|
||||
{
|
||||
my $self = shift;
|
||||
return join('.', $self->key, $self->major, $self->minor);
|
||||
|
||||
}
|
||||
|
||||
sub lookup_stem
|
||||
sub lookup_stem($spec, $repo)
|
||||
{
|
||||
my ($spec, $repo) = @_;
|
||||
|
||||
my $result = $repo->{$spec->stem};
|
||||
if (!defined $result) {
|
||||
return undef;
|
||||
|
@ -266,16 +239,13 @@ sub lookup_stem
|
|||
}
|
||||
}
|
||||
|
||||
sub no_match_major
|
||||
sub no_match_major($spec, $library)
|
||||
{
|
||||
my ($spec, $library) = @_;
|
||||
return $spec->major != $library->major;
|
||||
}
|
||||
|
||||
sub no_match_name
|
||||
sub no_match_name($spec, $library, $base)
|
||||
{
|
||||
my ($spec, $library, $base) = @_;
|
||||
|
||||
if (defined $spec->{dir}) {
|
||||
if ("$base/$spec->{dir}" eq $library->{dir}) {
|
||||
return undef;
|
||||
|
@ -290,10 +260,8 @@ sub no_match_name
|
|||
return "bad directory";
|
||||
}
|
||||
|
||||
sub no_match_shared
|
||||
sub no_match_shared($spec, $library, $base)
|
||||
{
|
||||
my ($spec, $library, $base) = @_;
|
||||
|
||||
if ($spec->no_match_major($library)) {
|
||||
return "bad major";
|
||||
}
|
||||
|
@ -305,15 +273,13 @@ sub no_match_shared
|
|||
}
|
||||
|
||||
# classic double dispatch pattern
|
||||
sub no_match
|
||||
sub no_match($spec, $library, $base)
|
||||
{
|
||||
my ($spec, $library, $base) = @_;
|
||||
return $library->no_match_dispatch($spec, $base);
|
||||
}
|
||||
|
||||
sub match
|
||||
sub match($spec, $library, $base)
|
||||
{
|
||||
my ($spec, $library, $base) = @_;
|
||||
return !$spec->no_match($library, $base);
|
||||
}
|
||||
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
# ex:ts=8 sw=4:
|
||||
# $OpenBSD: Build.pm,v 1.7 2010/11/27 11:55:14 espie Exp $
|
||||
# $OpenBSD: Build.pm,v 1.8 2023/06/13 09:07:18 espie Exp $
|
||||
#
|
||||
# Copyright (c) 2010 Marc Espie <espie@openbsd.org>
|
||||
#
|
||||
|
@ -15,46 +15,41 @@
|
|||
# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
|
||||
# OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
||||
#
|
||||
use strict;
|
||||
use warnings;
|
||||
use v5.36;
|
||||
|
||||
# the specs used during build are slightly different from the specs at
|
||||
# runtime.
|
||||
package OpenBSD::Library::Static;
|
||||
our @ISA = qw(OpenBSD::Library);
|
||||
sub new
|
||||
sub new($class, $dir, $stem)
|
||||
{
|
||||
my ($class, $dir, $stem) = @_;
|
||||
bless {dir => $dir, stem => $stem}, $class;
|
||||
}
|
||||
|
||||
sub no_match_dispatch
|
||||
sub no_match_dispatch($library, $spec, $base)
|
||||
{
|
||||
my ($library, $spec, $base) = @_;
|
||||
return $spec->no_match_static($library, $base);
|
||||
}
|
||||
|
||||
sub to_string
|
||||
sub to_string($self)
|
||||
{
|
||||
my $self = shift;
|
||||
return "$self->{dir}/lib$self->{stem}.a";
|
||||
}
|
||||
|
||||
sub version { ".a" }
|
||||
sub version($) { ".a" }
|
||||
|
||||
sub is_static { 1 }
|
||||
sub is_static($) { 1 }
|
||||
|
||||
sub is_better { 0 }
|
||||
sub is_better($, $) { 0 }
|
||||
|
||||
package OpenBSD::Library::Build;
|
||||
our @ISA = qw(OpenBSD::Library);
|
||||
|
||||
sub static
|
||||
sub static($)
|
||||
{ 'OpenBSD::Library::Static'; }
|
||||
|
||||
sub from_string
|
||||
sub from_string($class, $filename)
|
||||
{
|
||||
my ($class, $filename) = @_;
|
||||
if (my ($dir, $stem) = $filename =~ m/^(.*)\/lib([^\/]+)\.a$/o) {
|
||||
return $class->static->new($dir, $stem);
|
||||
} else {
|
||||
|
@ -63,14 +58,13 @@ sub from_string
|
|||
}
|
||||
|
||||
package OpenBSD::LibSpec;
|
||||
sub no_match_static
|
||||
sub no_match_static # forwarder
|
||||
{
|
||||
&OpenBSD::LibSpec::no_match_name;
|
||||
}
|
||||
|
||||
sub findbest
|
||||
sub findbest($spec, $repo, $base)
|
||||
{
|
||||
my ($spec, $repo, $base) = @_;
|
||||
my $spec2 = OpenBSD::LibSpec::GT->new($spec->{dir}, $spec->{stem},
|
||||
0, 0);
|
||||
my $r = $spec2->lookup($repo, $base);
|
||||
|
@ -93,15 +87,13 @@ sub findbest
|
|||
|
||||
package OpenBSD::LibSpec::GT;
|
||||
our @ISA = qw(OpenBSD::LibSpec);
|
||||
sub no_match_major
|
||||
sub no_match_major($spec, $library)
|
||||
{
|
||||
my ($spec, $library) = @_;
|
||||
return $spec->major > $library->major;
|
||||
}
|
||||
|
||||
sub to_string
|
||||
sub to_string($self)
|
||||
{
|
||||
my $self = shift;
|
||||
return $self->key.">=".$self->major.".".$self->minor;
|
||||
|
||||
}
|
||||
|
@ -110,10 +102,8 @@ sub to_string
|
|||
package OpenBSD::LibSpec::Build;
|
||||
our @ISA = qw(OpenBSD::LibSpec);
|
||||
|
||||
sub new_from_string
|
||||
sub new_from_string($class, $string)
|
||||
{
|
||||
my ($class, $string) = @_;
|
||||
|
||||
$string =~ s/\.$//;
|
||||
if (my ($stem, $strict, $major, $minor) = $string =~ m/^(.*?)(\>?)\=(\d+)\.(\d+)$/o) {
|
||||
return $class->new_object($stem, $strict, $major, $minor);
|
||||
|
@ -124,9 +114,8 @@ sub new_from_string
|
|||
}
|
||||
}
|
||||
|
||||
sub new_object
|
||||
sub new_object($class, $stem, $strict, $major, $minor)
|
||||
{
|
||||
my ($class, $stem, $strict, $major, $minor) = @_;
|
||||
my $n = $strict eq '' ? "OpenBSD::LibSpec" : "OpenBSD::LibSpec::GT";
|
||||
return $n->new_with_stem($stem, $major, $minor);
|
||||
}
|
||||
|
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue